Dobry sposób żeby użyć współdzielonych zasobów w testach w mocha

Dobry sposób żeby użyć współdzielonych zasobów w testach w mocha
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Koszalin
  • Postów:10094
1

Piszę sobie testy do aplikacji webowej w mocha, i mam kilka z nich które stawiają przeglądarkę na selenium żeby przetestować niektóre elementy w runtime (bo nie da się ich przetestować bez tego).

Testy są super, napisałem je, działają super, trwają około 200ms każdy, ale mam ich teraz około 40, i wykonują się podejrzanie długo, i ten czas będzie rosnąć.

Dzieje się tak dlatego że dla każdego suite'a stawiam i kładę driver od nowa. Stwierdziłem że mógłbym przyspieszyć testy gdybym używał wspólnego driver'a dla wszystkich testów, i jakoś wyczyścić state (np załadować about:blank i usunąć local storage), myślę że byłoby to szybsze.

Tylko właśnie, przejechałem dokumentację mochi i nie widzę żadnego default sposobu żeby współdzielić zasoby. Jedyne co mi przychodzi do głowy to setup() i teardown() w roocie testów, i odczytanie zmiennej globalnej. Macie jakieś inne pomysły?

W sumie tak na prawdę to jedyny problem jaki mam, to jak wyczaić moment kiedy wszystkie testy się skończyły żeby finalnie zamknać driver. Chyba trzeba dodać suiteTeardown() w roocie.

edytowany 1x, ostatnio: Riddle
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Koszalin
  • Postów:10094
0

Dobra, nawet to działa. Zrobiłem to tak, że testy wołają funkcję, która albo tworzy nową instancję drive'a, albo reużywa już istniejącej. Testy domeny nie stawiają przeglądarki, więc się wykonują błyskawicznie, ale te z "persistance" i "view" stawiają przeglądarkę. Zrobiłem screeny przed i po żeby pokazać, że faktycznie pierwszy test trwa tyle samo, ale kolejne są już szybsze:

screenshot-20240525150411.png

Nadal nie są tak szybkie jak mogą być (bo odświeżają stronę ładując zasoby ponownie), ale to chyba temat na później. Myślę że w przyszłości, jak testy znowu będą za wolne to poprawię to tak że zamiast robić reload'a, to np wywołam document.write() żeby nadpisać stan strony - to powinno być szybsze.

mustang_ex
  • Rejestracja:ponad rok
  • Ostatnio:9 dni
  • Postów:98
0

@Riddle działać działa, ale zabrałeś się od końca że tak to ujmę.............

Ja testy Selenium robię tak że grupuję sobie testy wg tego co mają testować, wg zasady jedna funkcja testowana = 1 katalog; na każdy katalog stawiam jednego drivera. Na końcu daję właśnie teardown(x=>testName); i tyle w temacie.

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Koszalin
  • Postów:10094
0
mustang_ex napisał(a):

Ja testy Selenium robię tak że grupuję sobie testy wg tego co mają testować, wg zasady jedna funkcja testowana = 1 katalog;

No ja też, tylko co jeśli testowana funkcja wymaga wielu testów? Trzymasz je wszystkie w jednym pliku? Ja je rozdzielam na mniejsze, również w swoich katalogach. Po to jest ten plugin.

mustang_ex
  • Rejestracja:ponad rok
  • Ostatnio:9 dni
  • Postów:98
0

Trzymasz je wszystkie w jednym pliku?

@Riddle Dokładnie tak. Nie liczy się długość ( = ilość linijek ) kodu w pliku; trzymając testy jednej fumnkcji w jednym pliku zachowujesz intuicyjność/przejrzystość drzewa katalogów/plików.

Tak z czystej ciekawości @Riddle : dlaczego akurat mocha?

edytowany 1x, ostatnio: mustang_ex
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Koszalin
  • Postów:10094
1
mustang_ex napisał(a):

Tak z czystej ciekawości @Riddle : dlaczego akurat mocha?

A co innego miałbym wybrać? Ava ma za małe wsparcie, a Jest to bloatware który dodaje pierdylion niepotrzebnych rzeczy. What else is there?

edytowany 1x, ostatnio: Riddle
LukeJL
To samo myślę o Jest. Nie rozumiem fenomenu jego popularności, testy odpalają się wolno, a są rzeczy, których nie potrzeba i te dziwne mocki, które wydają się być partyzantką, niż porządnym podejściem do testowania.
LukeJL
oprócz Mocha możesz też korzystać z innych lekkich rozwiązań - możesz korzystać z bun (który jest alternatywą dla Node.js), i wtedy bun test robisz. W Node.js też jest test runner, ale ten z Node.js ma jakieś gorsze komunikaty.
Riddle
@LukeJL: Moim zdaniem Jest cierpi na chorobę popularnych bibliotek, które są łatwe do uruchomienia (npm install "i już", scaffold, etc.), ale już po tygodniu potrafią przeszkadzać bardziej niż pomagają.
Riddle
@LukeJL: To dobry pomysł, i też chętnie odszedłbym od node'a; gdyby nie to że community i dostępne rozwiązania w node.js są po prostu powalające (jeśli chodzi o ich ilość i dostępność, nie jakość), a w bun niektóre rzeczy czasem trzeba napisać samemu.
LukeJL
Bun w założeniach jest kompatybilny z Node.js Bun is designed as a drop-in replacement for Node.js. It natively implements hundreds of Node.js and Web APIs, including fs, path, Buffer and more. https://bun.sh/ chociaż nie jestem pewien, do jakiego stopnia. Ja używam bun bardziej do szybkiego odpalenia czegoś, właśnie jako zamiennik tego, co normalnie bym zrobił w Node.js.
mustang_ex
  • Rejestracja:ponad rok
  • Ostatnio:9 dni
  • Postów:98
0

@Riddle jest dodaje bloat? Bardzo możliwe, aczkolwiek jest w pełni konfigurowalny (tak, wiem do kogo należy jest; tym bardziej jego pełna konfigurowalność wydaje się być dowcipem; ale jest jednak faktem). Właściwie wszystkie funkcjonalności można togglować on/off w konfigu.

EDIT: @Riddle znalazłem coś takiego. Tak jakby odpowiedź na Twoje pytanie a co innego miałbym wybrać? No właśnie że dobrze wybrałeś.

edytowany 1x, ostatnio: mustang_ex

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.