Czy jest na to dobry sposób? Piszę rozszerzenie, które współdziała ze stroną internetową jako skrypt zawartości i zapisuje dane przy użyciu localstorage. Czy są jakieś narzędzia, struktury itp., Których mogę użyć do przetestowania tego zachowania? Zdaję sobie sprawę, że istnieje kilka ogólnych narzędzi do testowania javascript, ale czy są one wystarczająco mocne, aby przetestować rozszerzenie? Testowanie jednostkowe jest najważniejsze, ale interesują mnie również inne rodzaje testów (np. Testy integracyjne).
unit-testing
google-chrome
google-chrome-extension
swampsjohn
źródło
źródło
Odpowiedzi:
Tak, istniejące frameworki są całkiem przydatne.
Niedawno umieściłem wszystkie moje testy na stronie „testowej”, która była osadzona w aplikacji, ale nie była dostępna, chyba że została fizycznie wpisana.
Na przykład wszystkie testy miałbym na stronie dostępnej pod
chrome-extension://asdasdasdasdad/unittests.html
Testy miałyby dostęp do
localStorage
itp. Aby uzyskać dostęp do skryptów zawartości, teoretycznie można sprawdzić, czy za pomocą osadzonych ramek IFRAME na stronie testowej są to bardziej testy na poziomie integracji, testy jednostkowe wymagałyby oderwania od prawdziwych stron, nie polegaj na nich, podobnie jak w przypadku dostępu do localStorage.Jeśli chcesz bezpośrednio testować strony, możesz zaaranżować swoje rozszerzenie, aby otwierało nowe karty (chrome.tab.create ({"url": "someurl"}). Dla każdej nowej karty powinien działać skrypt zawartości. Możesz użyć framework testowy, aby sprawdzić, czy Twój kod zrobił to, co powinien.
Jeśli chodzi o frameworki, JsUnit lub nowszy Jasmine powinien działać dobrze.
źródło
Pracuje nad kilkoma rozszerzeniami chromowane wymyśliłem
sinon-chrome
projekt, który pozwala uruchomić za pomocą testów jednostkowychmocha
,nodejs
iphantomjs
.Zasadniczo tworzy sinon makiety całego
chrome.*
interfejsu API, w którym można umieścić dowolne predefiniowane odpowiedzi json.Następnie ładujesz swoje skrypty za pomocą węzła jako strony
vm.runInNewContext
w tle iphantomjs
wyskakującego okienka renderowania / strony opcji.Na koniec zapewniasz, że wywołano chrome api z potrzebnymi argumentami.
Weźmy przykład:
Załóżmy, że mamy proste rozszerzenie Chrome, które wyświetla liczbę otwartych kart na plakietce przycisku.
strona w tle:
Aby to przetestować, potrzebujemy:
chrome.tabs.query
aby zwrócić predefiniowaną odpowiedź, np. dwie karty.chrome.*
interfejs API do jakiegoś środowiskaFragment kodu jest następujący:
Teraz możemy zawinąć go w
describe..it
funkcje mokki i uruchomić z terminala:Pełen przykład można znaleźć tutaj .
Dodatkowo sinon-chrome pozwala na wywołanie dowolnego zdarzenia chrome z predefiniowaną odpowiedzią, np
źródło
Choć
sinon.js
wydaje się doskonale, można też po prostu używać zwykłego jaśminu i drwić Chrome Callbacki potrzebujesz. Przykład:Drwić
Test
Po prostu zmodyfikuj wartość domyślną,
SpecRunner.html
aby uruchomić kod.źródło
O już istniejącym narzędziu w Chrome:
W narzędziu programistycznym Chrome znajduje się sekcja Zasoby do lokalnego przechowywania.
Narzędzia programistyczne> Zasoby> Pamięć lokalna
Zobacz zmiany lokalnego magazynu.
Możesz użyć console.profile do testowania wydajności i obserwowania stosu wywołań w czasie wykonywania.
Jeśli używasz skryptu zawartości i pamięci lokalnej razem bez strony / skryptu w tle i bez przekazywania wiadomości, pamięć lokalna będzie dostępna tylko z tej witryny. Tak więc, aby przetestować te strony, musisz wstrzyknąć swój skrypt testowy w tych zakładkach.
źródło
Odkryłem, że mogę użyć sterownika sieciowego Selenium do uruchomienia nowej instancji przeglądarki z preinstalowanym rozszerzeniem i pyautogui dla kliknięć - ponieważ Selenium nie może sterować „widokiem” rozszerzenia. Po kliknięciu możesz zrobić zrzuty ekranu i porównać je z „oczekiwanymi”, spodziewając się 95% podobieństwa (ponieważ w różnych przeglądarkach dopuszczalne są ruchy znaczników do kilku pikseli).
źródło
Aby potwierdzić kilka poprzednich odpowiedzi, Jasmine wydaje się dobrze współpracować z rozszerzeniami Chrome. Używam wersji 3.4.0.
Możesz użyć szpiegów Jasmine do łatwego tworzenia podwójnych testów dla różnych interfejsów API. Nie musisz budować własnego od podstaw. Na przykład:
Więcej szczegółów, jeśli to pomoże:
Jak wspomniano w innej odpowiedzi, utworzyłem stronę HTML jako część rozszerzenia mojej przeglądarki, które uruchamia moje testy. Strona HTML zawiera bibliotekę Jasmine, kod JavaScript mojego rozszerzenia oraz mój zestaw testów. Testy są uruchamiane automatycznie, a wyniki są formatowane za Ciebie. Nie ma potrzeby tworzenia programu uruchamiającego testy ani programu do formatowania wyników. Po prostu postępuj zgodnie z instrukcjami instalacji i użyj udokumentowanego tam kodu HTML, aby utworzyć stronę do uruchamiania testów, a także dołączyć swój zestaw testów do strony.
Wydaje mi się, że nie można dynamicznie pobierać frameworka Jasmine z innego hosta, więc właśnie dołączyłem wydanie Jasmine do mojego rozszerzenia. Pominię to i oczywiście moje przypadki testowe, gdy będę budować rozszerzenie do produkcji.
Nie patrzyłem na to, jak wykonać moje testy w wierszu poleceń. Byłoby to przydatne w przypadku narzędzi do automatycznego wdrażania.
źródło