2016-11-10 4 views
4

Ich lerne über Tests in Node.js mit mocha und dem assert Modul. assert hat diese Art von Methoden:Wie kommt es, dass Node.js Assert keine notOk() -Methode hat?

assert.equal(); 
assert.deepEqual(); 
assert.deepStrict(); 
assert.strict(); 
assert.ok(); // Is the value true? 

Und dann gibt es einige Gegensätze:

assert.notEqual(); 
assert.notDeepEqual(); 
assert.notDeepStrict(); 
assert.notStrict(); 

Aber es einem fehlt ... Warum gibt es kein notOk() Verfahren zum Testen, ob der resultierende Wert false oder nicht?

Dies hat mir denken, dass vielleicht gibt es etwas Grundsätzliches ich über Unit-Tests im Allgemeinen bin fehlt, dass vielleicht sollte ich immer nur testen, wenn Werte wahr und nie falsch sind ...

jetzt Denn ich haben einfach getan dies für falsey Aussagen zu testen:

assert.ok(!myValue); 

Ist das, wie Sie es tun sollen? Nochmal, warum gibt es nicht nur eine notOk() Methode, da alle anderen Methoden eine not Version haben?

+0

Sie können auch die Chai Behauptung Bibliothek für weitere Methoden überprüfen; Sie haben eine 'isNotOk'-Funktion: http://chaijs.com/api/assert/#method_isnotok – hackerrdave

Antwort

2

Wenn Sie sich die Dokumentation ansehen, stellt sie fest, dass .ok(value, message)assert.equal(!!value, true, message) entspricht. Dies scheint einfach eine Komfortfunktion zu sein.

Es sollte beachtet werden, dass, während die Funktion ok() genannt wird, das nicht bedeutet, dass es einen true Wert von Ihrem Code erwartet. Es erwartet eine Aussage, an der Sie die Wahrheit von. So, während die Verwendung von !myValue gültig ist, ich denke, es wäre sinnvoller sein, zu schreiben: Sinn semantisch

assert.ok(myValue === false); 

Die oben macht, wie Sie immer noch die Truthiness des Ausdrucks zu testen sind, es passiert einfach so, dass Sie erwartet, dass es falsch ist. Eine Funktion notOk() eingeschlossen zu haben, würde eine mehrdeutige Bedeutung haben. Nicht OK bedeutet Fehler, und so könnte der Fehler einer notOk Funktion nur ein wenig verschlungen scheinen.

Wie für die anderen Methoden mit ihren not Äquivalenten, denke ich, dass die Sprache immer noch sinnvoll ist. Sprich notEqual bedeutet, dass Sie speziell für eine Ungleichheit testen, während notOk keinen Sinn ergibt. Persönlich würde ich nur mit ok() alles zusammen weglassen, wie ok in und an sich ist es ziemlich zweideutig.

Wenn Sie wirklich die Notwendigkeit fühlen, könnten Sie einfach Ihre eigene Komfortfunktion zu schreiben.


Ich denke, es ist auch erwähnenswert ist, dass dies die Quelle:

// 4. Pure assertion tests whether a value is truthy, as determined 
// by !!guard. 
// assert.ok(guard, message_opt); 
// This statement is equivalent to assert.equal(true, !!guard, 
// message_opt);. To test strictly for the value true, use 
// assert.strictEqual(true, guard, message_opt);. 

function ok(value, message) { 
    if (!value) fail(value, true, message, '==', assert.ok); 
} 
assert.ok = ok; 
+0

Wenn Sie' assert.ok (myValue === false); 'verwenden wollen, dann verwenden Sie einfach' assert. gleich (myValue, false); '? Ich weiß, dass sie im Wesentlichen dasselbe sind. Aber es ist komisch, dass '.ok()' ohne '.notOk()' existiert, da es dasselbe ist wie 'asser.equal (myValue, true);' –

Verwandte Themen