Jak widzę wiele razy, funkcja anonimowego wykonywania jest używana do przechowywania całych bibliotek. W jaki sposób można testować te biblioteki, np. QUnit nie ma dostępu do niczego w opakowaniu anonimowej funkcji?Czy JavaScript może być "testowany jednostkowo", jeśli jest zawijany w funkcję anonimowego wykonywania
Odpowiedz
Wystarczy zrobić wszystkie testy na tej funkcji „publiczny”, patrz na przykład oficjalnej jQuery rdzeń test suite
Fragment:
// Basic constructor's behavior
equals(jQuery().length, 0, "jQuery() === jQuery([])");
equals(jQuery(undefined).length, 0, "jQuery(undefined) === jQuery([])");
equals(jQuery(null).length, 0, "jQuery(null) === jQuery([])");
equals(jQuery("").length, 0, "jQuery('') === jQuery([])");
equals(jQuery("#").length, 0, "jQuery('#') === jQuery([])");
Nie trzeba uzyskać dostęp do funkcji prywatnych przetestować publicznych zachowanie
Zgadzam się, że nie chcesz wykonywać Backdoor Manipulation, znajdując podstępne sposoby dyskretnego testowania prywatnych metod.
Jednakże, jak zauważyłeś, ligi ligowe aplikacji internetowych zostały napisane jako jedna gigantyczna, samonapędzająca się kula błota, pozbawiona jakiegokolwiek nazewnictwa lub publicznego interfejsu API. To zupełnie inny problem, niż jest mało prawdopodobne, aby spotkać się w wielu innych stosach technologii.
Jedną z ogromnych wartości języka JavaScript TDD w Internecie jest wymuszanie pisania skryptów JavaScript, które mogą być używane przez co najmniej dwie strony: aplikację internetową i test jednostki.
Grałem tej grze Legacy uratować kilka razy z Jasmine:
Jeśli bezimienny, owinąć każdy kawałek funkcjonalności w własnym wykonaniu, nazwana metodą
Characterize z tych metod funkcjonalne specyfikacje Jasmine. Uwielbiam Jasmine z wielu powodów, ale naprawdę ma qunit beat w starszej wersji programu ratunkowego, ponieważ ma możliwość zagnieżdżania grup z przykładami. Na przykład, gdy kod, który charakteryzuję ma anonimową funkcję, zwykle można użyć zagnieżdżonej grupy przykładów, aby dyskretnie scharakteryzować zachowanie tej funkcji zagnieżdżonej, pobierając ją ze szpiega i wywołując ją w różnych kontekstach.
Gdy jesteś zielony, start refactoring w małych, dobrze nazwanych, dobrze zorganizowane metod/nazw
Zapis pojedyncze testy do scharakteryzowania tych jednostek
zjeść kanapkę i rozważać, czy te testy funkcjonalne są nadal cenne (jeśli nie masz żadnych testów na stosie, prawdopodobnie są, jeśli masz już dobre testy na stosach, prawdopodobnie jest zbyt mało, by uzasadnić ich utrzymanie). Ponieważ zwykle prowadzę programowanie z Cucumber/Capybara, nie widzę zbyt dużej wartości w pisaniu zintegrowanych testów z Jasmine.
+1 Dla kanapki –
Naprawiono link @rene –
- 1. Czy JavaScript może być bootowany?
- 2. Javascript: Wykrywanie, czy tekst będzie zawijany
- 3. Czy javascript może być wbudowany w WebPacka?
- 4. Python: czy __file__ może być Brak, jeśli import się powiódł?
- 5. Czy narzędzie toThrow Matcher wymaga, aby argument był zawijany w anonimową funkcję?
- 6. Czy maszynopis może wyeksportować funkcję?
- 7. Czy REST w praktyce może być bezpaństwowcem?
- 8. Testowanie jeśli element jest tablicą, w JavaScript
- 9. CSS nie może być zastosowana do elementu formularza poprzez javascript, jeśli jest ustawiona doctype
- 10. Czy "testBuildType" może być warunkowe w pliku build.gradle projektu Android?
- 11. Czy jest możliwe (legalne) przypisanie anonimowego związku w literale złożonym?
- 12. Czy zakres może być dopasowany w Scali?
- 13. Tekst nie jest zawijany w etykiecie etykiety
- 14. Czy to może być rekurencyjne w Prologu?
- 15. Czy JavaScript może być wyraźnie użyty do opracowania gier Unity?
- 16. Czy EntryElement może być wieloliniowy w MonoTouch.Dialog?
- 17. zastosować funkcję w JavaScript
- 18. Co zrobić, jeśli potrzebuję anonimowego obszaru nazw w nagłówku?
- 19. Czy metoda w klasie może być generatorem?
- 20. Czy usługa WCF może zastąpić funkcję TCPListener?
- 21. Czy to może być optymalizacja połączenia z ogonem? Jeśli tak, jaki jest tego specjalny powód?
- 22. Sprawdź, czy funkcja JavaScript zwraca się bez jej wykonywania?
- 23. Czy ta próbka skrótu może być krótsza?
- 24. Jak ograniczyć czas wykonywania funkcji w javascript?
- 25. Co się dzieje, jeśli kod jest zawijany w nawiasy klamrowe w funkcji?
- 26. Czy wektor :: shrink_to_fit może być ponownie przydzielony?
- 27. Czy operator obsady może być jawny?
- 28. Jaki jest najlepszy sposób profilowania wykonywania javascript?
- 29. Czy aplikacja Backbone.js może być stopniowo ulepszana i może być indeksowana przez wyszukiwarki?
- 30. Jak wycentrować tekst wyrównany do lewej strony, nawet jeśli jest zawijany?
Możesz pracować nad kodem (i przetestować go) i użyć skryptu "kompilacji", aby zawinąć go w opakowanie. Funkcja IE '(okno, dokument, undefined) {...} (okno, dokument)' gdzie '...' jest twoim kodem. Wystarczy połączenie kodu. –