Miejsce wykonywania testów

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.

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.

Zrzut ekranu z serwisu GitHub
  Proces testowania działań.
Zrzut ekranu procesu testowania w usłudze GitHub Actions.

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.
  • 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?

przed przesłaniem
zweryfikuj
test
zaznacz