Zautomatyzowane testy można zwykle uruchamiać ręcznie lub za pomocą narzędzia do testowania (często nazywanego mechanizmem uruchamiania testów) do testów. Nie zawsze jednak musisz uruchamiać skrypty ręcznie. Testy można przeprowadzać na kilka sposobów, aby wyciągnąć z nich opinię pewność siebie w różnych momentach cyklu programowania.
Skrypt wymagań wstępnych
Projekty internetowe mają zwykle plik konfiguracji (plik package.json
), który jest
skonfigurowane przy użyciu npm, pnpm, Bun lub podobnej. Ten plik konfiguracji zawiera
zależności projektu i innych informacji, a także skrypty pomocnicze. Te
w skryptach pomocniczych mogą się znaleźć instrukcje kompilacji, uruchamiania i testowania projektu.
W usłudze package.json
musisz dodać skrypt o nazwie test
, który opisuje
jak przeprowadzać testy. To ważne, ponieważ w przypadku korzystania z npm lub podobnego
narzędzia „test” ma specjalne znaczenie.
Ten skrypt może tylko wskazywać pojedynczy plik, który zgłasza wyjątek:
typu node tests.js
, ale zalecamy użycie jej do wskazania
uczestnikiem testów.
Jeśli do uruchamiania testów używasz Vitest,
package.json
będzie wyglądać tak:
{
"name": "example-project",
"scripts": {
"start": "node server.js",
"test": "vitest --run"
}
}
Uruchomienie npm test
z tym plikiem powoduje jednorazowe uruchomienie domyślnego zestawu testów Vitest. W
Vitest. Ustawienie domyślne to znajdowanie wszystkich plików z rozszerzeniem „.test.js”. lub
podobne i je uruchamiać. W zależności od
polecenie może być nieco inne.
Wybraliśmy Vitest, popularną platformę testową – podane w tym kursie. Więcej informacji znajdziesz tę decyzję w Vitest w roli biegacza. Trzeba jednak pamiętać, że platformy testowe i słowa biegowe, między językami – mają zwykle wspólny żargon.
Ręczne wywołanie testu
Ręczne uruchamianie automatycznych testów (np. użycie funkcji npm test
w
poprzedniego przykładu) może być praktycznym rozwiązaniem podczas pracy nad bazą kodu.
Pisanie testów sprawdzających daną funkcję podczas jej opracowywania pomoże
sposób, w jaki powinna działać dana funkcja.
Ta kwestia odnosi się do koncepcji
programowania opartego na testach (TDD).
Uczestnicy testów zwykle mają krótkie polecenie, które można wywołać, aby uruchomić
wszystkich testów, a także tryb obserwacyjny, który po zapisaniu uruchamia je ponownie.
. Wszystkie te opcje są pomocne przy opracowywaniu nowej funkcji.
stworzonym z myślą o ułatwianiu pisania nowych funkcji i testów
i szybkie przekazywanie informacji. Na przykład Vitest domyślnie działa w trybie oglądania:
polecenie vitest
sprawdzi zmiany i ponownie uruchomi wszystkie znalezione testy. Śr
zalecamy pozostawienie go otwartego w innym oknie podczas pisania testów.
szybko otrzymywać informacje zwrotne o testach w miarę ich opracowywania.
Niektóre aplikacje biegowe umożliwiają też oznaczanie testów w kodzie jako only
. Jeśli Twój kod
obejmuje tyle testów: only
, tylko te testy zostaną wywołane po przeprowadzeniu testów,
co przyspieszy i ułatwi rozwiązywanie problemów. Nawet jeśli wszystkie
a testy kończą się szybko, dzięki only
możesz zmniejszyć nakład pracy i
odciąganie uwagi od przeprowadzania testów niezwiązanych z funkcją lub testem, nad którym pracujesz;
W przypadku małych projektów, zwłaszcza tych z jednym programistą, możesz też wypracować nawyk regularnego uruchamiania całego zestawu testów w bazie kodu. Jest to szczególnie przydatne, jeśli testy są małe i szybko się kończą ( dłuższy niż kilka sekund dla wszystkich testów), dzięki czemu można upewnić się, Zanim przejdziesz dalej,
Przeprowadzanie testów w ramach wstępnego przesyłania lub sprawdzania
Wiele projektów sprawdza poprawność działania bazy kodu,
ma zostać scalony z powrotem z jej gałęzią main
. Jeśli dopiero zaczynasz testować,
W przeszłości braliście udział w projektach open source, pewnie już wiecie,
jest częścią procesu żądania pull (PR), potwierdza, że wszystkie testy projektu
oznacza, że Twój nowy efektowny wynik nie wpłynął negatywnie na
istniejącego projektu.
Jeśli testy są uruchamiane lokalnie, w repozytorium online projektu (np. GitHub lub inna usługa hostingu kodu) nie dowie się, że testy zakończyły się powodzeniem, więc przeprowadzenie testów jako zadania przed przesłaniem pozwala zrozumieć, Wszystko działa.
Na przykład w serwisie GitHub są one nazywane „sprawdzaniem stanu”. który można dodać
Działania na GitHubie. Akcje GitHub
to zasadniczo rodzaj testu: każdy krok musi się udać (nie może to być błąd
Error
). Działania można zastosować do wszystkich PR w projekcie,
a projekt może wymagać zaliczenia akcji przed opublikowaniem kodu. GitHub
Jednym z kroków domyślnego działania Node.js jest uruchomienie npm test
.
Ten sposób testowania polega na sprawdzaniu, czy baza kodu jest zawsze „zielona” przez nieakceptację kodu, który nie przeszedł poprawnie testów.
Przeprowadzanie testów w ramach ciągłej integracji
Po zaakceptowaniu zielonego PR większość baz kodu przeprowadza testy ponownie na podstawie
gałęzi main
Twojego projektu, a nie poprzedniego PR. Może się tak zdarzyć
natychmiast lub regularnie (np. co godzinę lub co noc). Te
wyniki są często wyświetlane w panelu ciągłej integracji (CI),
pokazuje ogólny stan projektu.
Ten krok CI może wydawać się zbędny, zwłaszcza w przypadku projektów z małymi bazami kodu: testów zaliczonych podczas weryfikacji, więc powinny one zakończyć się pomyślnie po wprowadzeniu zmiany. Pamiętaj jednak: to nie zawsze jest prawdą! Testy mogą nieoczekiwanie zakończyć się niepowodzeniem, nawet po pomyślnym co przynosi pozytywne efekty. Oto kilka przyczyn:
- Zaakceptowano kilka zmian „jednocześnie”, czasami określanych jako warunek wyścigu, i wpływają na siebie w subtelny, nieprzetestowany sposób.
- Wyniki testów nie są powtarzalne lub wykazują „niestabilne” wyniki kod – oba
i zakończy się niepowodzeniem bez wprowadzania zmian w kodzie.
- Może się tak zdarzyć, jeśli korzystasz z systemów zewnętrznych w stosunku do bazy kodu. Dla
serwer proxy, wyobraź sobie testowanie, jeśli
Math.random() > 0.05
– spowoduje to losowe niepowodzenie w 5% w czasie rzeczywistym.
- Może się tak zdarzyć, jeśli korzystasz z systemów zewnętrznych w stosunku do bazy kodu. Dla
serwer proxy, wyobraź sobie testowanie, jeśli
- Niektóre testy, np. kompleksowe, są zbyt kosztowne lub zbyt kosztowne do przeprowadzenia na każdy PR. (więcej informacji na ten temat znajdziesz w artykule o typach testów automatycznych): i mogą przestać wyświetlać się z czasem bez ostrzegania.
Każdego z tych problemów nie da się rozwiązać, ale warto zdawać sobie sprawę, testowania i tworzenia oprogramowania w ogóle nie jest dokładnym nauki.
Zakończenie w trakcie przywracania poprzedniej wersji
Gdy testy są przeprowadzane w ramach ciągłej integracji, a nawet jeśli są jest uruchamiany w ramach kontroli stanu, możliwe jest, że kompilacja ma kolor „czerwony” lub inny stan, który oznacza niepowodzenie testów. Jak już wspominaliśmy, może się to zdarzyć z różnych powodów, w tym podczas wyścigu lub niestabilnych testów.
W przypadku mniejszych projektów możesz instynktownie traktować sytuację kryzysową. Przerwij wszystko, wycofać lub cofnąć niewłaściwą zmianę i wrócić do znanego w dobrym stanie. Może to być dobre podejście, ale pamiętaj, testowanie (i ogólnie oprogramowanie) to cel, a nie cel Twoim celem jest zapewne pisanie oprogramowania, a nie wszystkie testy. Zamiast tego możesz przesunąć do przodu, śledząc zmianę powodującą niezgodność z inną. zmiana, która eliminuje nieudane testy.
Być może znasz już lub pracowałeś(-aś) nad dużymi projektami, które istnieją w trwałym stanie. Albo co gorsza, w dużym projekcie testuje się niestabilny test, jest przerywana na tyle często, że powoduje zmęczenie budzika dla programistów. Jest to często istotny problem, który muszą rozwiązać liderzy: mogą być nawet wyłączane, ponieważ postrzega się je jako „uniemożliwiające Google Cloud.
Nie da się tego szybko rozwiązać, ale możesz nabrać pewności w pisaniu (podnoszenie umiejętności) oraz ograniczenie zakresu testów (uproszczenie) te błędy można łatwiej zidentyfikować. Większa liczba testów komponentów lub testów integracji (więcej informacji o typach znajdziesz w sekcji Typy automatyzacji ) może zapewnić większą pewność niż jeden ogromny kompleksowy test, który jest trudny w prowadzeniu i stara się go przeprowadzić. wszystko naraz.
Zasoby
Sprawdź swoją wiedzę
Jak nazywa się specjalny skrypt, który obsługuje npm i podobne programy? których poszukać podczas testowania?