Aufbauend auf diesem Tutorial zum Testen einer AngularJS-App mit Chai möchte ich einen Test für einen undefinierten Wert mit dem "sollte" -Stil hinzufügen. Dies schlägt fehl:
it ('cannot play outside the board', function() {
scope.play(10).should.be.undefined;
});
mit dem Fehler "TypeError: Die Eigenschaft 'sollte' von undefiniert kann nicht gelesen werden", aber der Test besteht den Stil "erwarten":
it ('cannot play outside the board', function() {
chai.expect(scope.play(10)).to.be.undefined;
});
Wie kann ich es mit "sollte" zum Laufen bringen?
javascript
angularjs
testing
chai
thebenedict
quelle
quelle
assert.isUndefined(scope.play(10))
Antworten:
Dies ist einer der Nachteile der Sollte-Syntax. Es funktioniert, indem allen Objekten die Eigenschaft should hinzugefügt wird. Wenn jedoch ein Rückgabewert oder ein Variablenwert undefiniert ist, gibt es kein Objekt, das die Eigenschaft enthält.
Die Dokumentation enthält einige Problemumgehungen, zum Beispiel:
quelle
should.not.exist
überprüft, ob der Wertnull
so ist, dass diese Antwort nicht korrekt ist. @ Daniel hat die Antwort unten :should.equal(testedValue, undefined);
. Das sollte die akzeptierte Antwort sein.wie in der Chai-Dokumentation erwähnt
quelle
.equal()
. Ich kann verstehen, warum @OurManInBananas um eine Erklärung gebeten hat. Es ist eine unerwartete Verwendung von sollte als Funktion, die zwei Argumente akzeptiert, anstatt dass die erwartete verkettete Methodenform ein einzelnes Argument für den erwarteten Wert akzeptiert. Sie können dies nur erreichen, indem Sie eine aufgerufene Version von importieren / benötigen und zuweisen,.should()
wie in der akzeptierten Antwort von @DavidNorman und in dieser Dokumentation beschrieben ..equal
Syntax viel bessere Fehlermeldungen erzeugt, da Sie damit Nachrichten ausgeben können, dieTest auf undefiniert
Test auf Null
Test auf Falschheit, dh unter Bedingungen als falsch behandelt
quelle
quelle
Ich hatte Mühe, die Should-Anweisung für undefinierte Tests zu schreiben. Folgendes funktioniert nicht.
Ich habe die folgenden Lösungen gefunden.
if kann es auch als Typprüfung schreiben
Ich bin mir nicht sicher, ob dies der richtige Weg ist, aber es funktioniert.
Laut Post von Ghost in Github
quelle
Versuche dies:
quelle
Die Antwort von @ david-norman ist gemäß der Dokumentation korrekt. Ich hatte einige Probleme mit der Einrichtung und entschied mich stattdessen für Folgendes.
(typeof scope.play (10)). should.be.undefined;
quelle
typeof
Operator gibt eine Zeichenfolge zurück ; so konnte diese Behauptung nicht weitergegeben werden; cuz'undefined' !== undefined
Vergessen Sie nicht eine Kombination von
have
undnot
Schlüsselwörtern:quelle
Sie können Ihr Funktionsergebnis einschließen
should()
und auf einen Typ von "undefiniert" testen:quelle