2011-08-17 11 views
11

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

+0

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. –

Odpowiedz

2

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

6

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:

  1. Jeśli bezimienny, owinąć każdy kawałek funkcjonalności w własnym wykonaniu, nazwana metodą

  2. 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.

  3. Gdy jesteś zielony, start refactoring w małych, dobrze nazwanych, dobrze zorganizowane metod/nazw

  4. Zapis pojedyncze testy do scharakteryzowania tych jednostek

  5. 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.

+0

+1 Dla kanapki –

+0

Naprawiono link @rene –

Powiązane problemy