2013-07-17 5 views
10

W Chai można zrobić rzeczy jak następuje:W jaki sposób biblioteki asemblacji, takie jak Chai, działają bez wymuszania wywołania funkcji?

expect({}).to.exist; 

exist nie jest to wywołanie funkcji, ale nadal działa w ramach testów. Odwrotna (expect({}).to.not.exist) powoduje, że testy zakończą się niepowodzeniem, ale znowu, exist nie jest wywołaniem funkcji.

W jaki sposób te zapewnienia działają bez wywoływania funkcji? W rzeczywistości, jeśli próbuję powiedzieć expect({}).to.exist(), test nie powiedzie się, ponieważ exist nie jest funkcją.

Odpowiedz

10

Wyjaśniałem (lub przynajmniej wymyśliłem metodę). Użyj JavaScript getters:

var throws = { 
    get a() { 
    throw new Error('a'); 
    }, 
    get b() { 
    throw new Error('b'); 
    }, 
    get c() { 
    throw new Error('c'); 
    } 
}; 

Podczas throws.a, throws.b lub throws.c, odpowiedni błąd zostanie wyrzucony.

Odtąd łatwo jest budować twierdzenia zawarte w Chai.

+0

Jak to wyjaśnia? To całkiem duży skok bez wyjaśnienia, co dzieje się w środku. – vsync

+1

Ten link naprawdę pomaga wyjaśnić rzeczy, jeśli nie znasz się na pobierających. Krótka wersja jest taka, że ​​dzięki nowym (-owym) ulepszeniom przeglądarki możesz teraz kontrolować właściwość wykraczającą poza ustawienie (np. 'A.b = 5'). Teraz możesz zdefiniować metodę "getter" dla właściwości, a gdy dowolny kod spróbuje odczytać wartość tej właściwości (np. 'Console.log (a.b)') przeglądarka uruchomi zdefiniowaną metodę "getter". Ta metoda może następnie wywołać logikę (np. Logika asercji Chai). Więc kiedy robisz 'to.exist', nawet jeśli nie ma'() 'po tym, jak * jesteś * wciąż wywołuje metodę (metodę getter). – machineghost

Powiązane problemy