Wow, co za bałagan. To jest scenariusz.Jasmine + JSTestDriver + Pokrycie + RequireJS
- Aplikacja JS sterowana przez szkielet.
RequireJS dla funkcjonalności AMD, inicjowane tak:
<script data-main="js/main" src="js/require.js" type="text/javascript"></script>
następnie wewnątrz main.js następujący kod config:
require.config( { paths: { ... : ... } });
Każdy Backbone View/model/Router jest „define (. ..) "moduł i" wymagają ("theOneRouter", ...) "jest wywoływany raz w main.js.
r.js używany jako optymalizator z Uglify/Closure. Jeden "skompilowany" plik main.js jest tworzony w podfolderze ./release, który wybieram dynamicznie w ramach mojej platformy .net.
Zajęło sporo czasu, aby uzyskać Backbone + Require.JS do pracy, ale działa świetnie teraz!
Potem uderzanie Jasmine w to samo wymagało trochę niestandardowej pracy, ale działało dobrze. Musiałem załadować require.js z mojego pliku SpecRunner.html, zdefiniować każdy moduł testowy jako AMD za pomocą wywołania require (...), a ja sporządzić instancję & uruchomić Jasmine raz z połączenia, aby wywołać żądanie require (...) w SpecRunner.html:
require( [ //"test/specs/testSpec1", "test/specs/views" ], function() { jasmine.getEnv().updateInterval = 1000; var reporter = new jasmine.TrivialReporter(); jasmine.getEnv().addReporter(reporter); .... .... });
to też działa świetnie. Testy ładują się & uruchom, bez problemów. Require zajmuje się wszystkim.
Teraz chciałbym, aby framework, taki jak JSTestDriver, działał jak mój biegacz. Wybrałem JSTD dla jego prostoty, możliwości testowania na zdalnych przeglądarkach, obsługi zasięgu kodu, ale wciąż jestem otwarty na inne sugestie.
JSTestDriver per se działa dobrze, jedyny problem jaki mam, to połączenie kombinacji JSTD + Jasmine + ReuireJS. Największym problemem jest, jeśli powiem JSTD w pliku konfiguracyjnym około Jasmine/Wymagaj moduł testowy w celu jej obciążenia, pojawia się następujący błąd:
http://requirejs.org/docs/errors.html#mismatch
Jeśli używam r.js do optymalizowania wszystkich mój kod do jednego main.js, kombinacja działa, w tym Pokrycie, ale zasięg jest gromadzony na jednym gigantycznym pliku i trudny do analizy. Nie wspominając już o tym, że przyswojenie pliku js o długości 50k i uruchomienie go przez JSTD zajmuje bardzo dużo czasu.
Próbowałem utworzyć plik js podobny do urządzenia, który ładuje wszystkie moduły testowe Jasmine &, ale wracam do powyższego błędu "niedopasowania" ORAZ, jeśli nie powiem JSTD o każdym module osobno (ładując urządzenie html/js, które ma rzeczywisty załadunek) nie będą one wyposażone w oprzyrządowanie do pokrycia kodu.
Ktoś otrzymał tę konkretną kombinację do pracy? Może proszę o zbyt wiele ...
Dzięki za wejście, dobry komentarz. Tak, masz rację co do swoich punktów i próbowałem ręcznie nazwać moje moduły i użyć wywołań wymagających zamiast funkcji define(), ale nie jest to wykonalne rozwiązanie: nawet jeśli jest zautomatyzowane, wymagałoby to wykonania znacznej dodatkowej pracy przed każdy przebieg testowy, który chciałbym omijać w celu szybkiego uruchomienia testów podczas rozwoju. – Bernardo
Mam teraz poprawioną wersję pliku jsTestDriver.jar, która umożliwia wyeksportowanie plików za pomocą wyrażeń regularnych. Umożliwia także ładowanie plików JavaScript z sekcji "wyświetl". Obsługa plików źródłowych JavaScript oznacza, że nie zostaną automatycznie wykonane po załadowaniu stron przeglądarki. Zamiast tego, gdy przeglądarka wykonuje require.js, require jest w stanie wyciągnąć pliki z sekcji serve. W ten sposób moduły mogą być anonimowe bez żadnego problemu. Zobacz [Testowanie szkieletu] (http://pseudobry.com/backbone-testing/) – jdobry