2013-02-05 4 views
8

Ich lerne nur die Jasmine-Bibliothek, und ich habe festgestellt, dass Jasmine eine sehr begrenzte Anzahl von eingebauten Behauptungen hat. Ich habe auch bemerkt, dass, trotz solch einer begrenzten Anzahl, zwei ihrer Behauptungen redundant erscheinen: toBeDefined/toBeUndefined.Jasmine: Warum zu undefiniert und nicht zu definieren?

Mit anderen Worten, diese beiden scheint für exakt das gleiche, was zu überprüfen:

expect(1).toBeDefined(); 
expect(undefined).not.toBeUndefined(); 

Gibt es einen Grund dafür, wie ein Fall, in dem toBeDefined nicht das gleiche wie toBeUndefined ist? Oder ist das nur die eine Behauptung in Jasmine, die zwei vollkommen gleiche Möglichkeiten hat, aufgerufen zu werden?

+3

"zu sein ... oder nicht.zu sein ..." - das ist die Frage. Ich bin die ganze Woche hier, Leute – demoncodemonkey

Antwort

6

Man könnte die gleiche nehmen für toBeTruthy und toBeFalsy oder toBeLessThan und toBeGreaterThan (obwohl ich das fehlende assert erraten aus den letzten beiden ist toEqual). Am Ende kommt es auf Lesbarkeit und Benutzerfreundlichkeit an.

Um Ihnen eine vollständigere Antwort zu geben, könnte es nützlich sein, einen Blick auf den Code zu werfen, der für diese Funktionen aufgerufen wird. Der Code, der ausgeführt wird, durchläuft separate Pfade (also toBeUndefined ist nicht einfach !toBeDefined). Die einzige wirkliche Antwort, die Sinn macht, ist die Lesbarkeit (oder das Eingehen auf lästige Feature-Anfragen). https://github.com/pivotal/jasmine/blob/master/src/core/Matchers.js#L135