Testy jednostkowe aplikacji webowej

1

Na jakim środowisku odpalacie testy jednostkowe aplikacji webowej? W necie nie ma nigdzie jednoznaczniej odpowiedzi w jakich przypadkach używać np. jsdoma, a w jakich realnej przeglądarki np. poprzez Karmę. Jsdom bardzo kusi, bo jest lekki, szybki i ma wsparcie niemalże w każdym test runnerze; natomiast testy w realnej przeglądarce wydają się bardziej niezawodne i dostarczające wiarygodne wyniki. Jak to jest u Was w projektach?

1

Piszesz o testach funkcjonalnych (e2e) - ja polecam cypress, czyli testy w przeglądarce.

1
Markuz napisał(a):

Piszesz o testach funkcjonalnych (e2e) - ja polecam cypress, czyli testy w przeglądarce.

No właśnie piszę o testach jednostkowych. Jeżeli coś przetestujesz bezpośrednio na Node.js (V8) przy użyciu suchej Mochy (ewentualnie z Jsdomem), to nie ma gwarancji, że zadziała tak samo na Firefox (SpiderMonkey). Przykładem jest chociażby metoda Array.sort(), która przyjmuje parametry w innej kolejności w zależności od tego czy to jest Chrome czy Firefox, a to już może mieć wpływ na poprawność logiki biznesowej.
title

1

Źle interpretujesz to, co widzisz.

Array.sort() przyjmuje jeden parametr - jest nim funkcja, która zostanie wykorzystana do porównania elementów (dokumentacja here), a sama ta funkcja ma dokładnie zdefiniowane w standardzie parametry, które obydwa silniki traktują identycznie.

Wskazana przez Ciebie różnica wynika z tego, że obydwa silniki implementują pod spodem różne algorytmy sortowania (bądź ten sam, lecz w nieco odmienny sposób) - nie powinno to mieć jednak żadnego wpływu na logikę biznesową, ponieważ jest to jedynie detal wskazanego silnika, który może się zmienić każdego dnia.

Innymi słowy: jeśli Twoja logika biznesowa zwraca różne wyniki dla sortowania bąbelkowego oraz szybkiego (abstrahując od stabilności obydwu algorytmów), masz poważny problem.

0
Patryk27 napisał(a):

Źle interpretujesz to, co widzisz.

Array.sort() przyjmuje jeden parametr - jest nim funkcja, która zostanie wykorzystana do porównania elementów (dokumentacja here).

Wskazana przez Ciebie różnica wynika z tego, że obydwa silniki implementują pod spodem różne algorytmy sortowania (bądź ten sam, lecz w nieco odmienny sposób) - nie powinno to mieć jednak żadnego wpływu na logikę biznesową, ponieważ jest to jedynie detal wskazanego silnika.

Skrót myślowy, stąd to nieporozumienie w definicji źródła problemu. Ta różnica w algorytmie sortowania nie powinna mieć wpływu na logikę biznesową, jednak może się tak zdarzyć (jeżeli z jakiegoś powodu programista uzależni działanie kodu od tego co dostanie w takiej funkcji w parametrach; nie wnikam bo nie to jest tematem tego wątku) i testy bez użycia przeglądarki nie wykażą żadnych problemów. Nie wiadomo czy jest to odosobniony przypadek i czy gdzieś jest jeszcze jakaś wbudowana funkcjonalność JSa, która działa inaczej w zależności od silnika. To samo z wersjami testowymi przeglądarek, które wprowadzają jakieś breaking changes i takie testy na żywym organizmie byłyby w stanie wyłapać ewentualny problem, który pojawi się w przyszłości po updacie.

Dlatego zastanawiam się czy testowanie "na sucho" tylko w Node.js i emulowanym drzewem DOM, to bezpieczne podejście i jest na tyle wystarczające by spać spokojnie

1 użytkowników online, w tym zalogowanych: 0, gości: 1