Ich möchte bestätigen, dass ein Wert eine Dezimalzahl (oder 0) ist, daher sollte die Zahl größer oder gleich Null und kleiner als 1 sein.
describe('percent',function(){
it('should be a decimal', function() {
var percent = insights.percent;
expect(percent).toBeGreaterThan(0);
expect(percent).toBeLessThan(1);
});
});
Wie ahme ich "> = 0" nach?
javascript
tdd
jasmine
Bryce Johnson
quelle
quelle
expect(percent).not.toBeLessThan(0);
Antworten:
Ich dachte, ich sollte dies aktualisieren, da sich die API in neueren Versionen von Jasmine geändert hat. Die Jasmine-API verfügt jetzt über integrierte Funktionen für:
Sie sollten diese Funktionen den folgenden Hinweisen vorziehen.
Klicken Sie hier, um weitere Informationen zur Jasmine Matchers API zu erhalten
Ich weiß, dass dies eine alte und gelöste Frage ist, aber ich habe festgestellt, dass eine ziemlich ordentliche Lösung übersehen wurde. Da größer oder gleich ist die Umkehrung der Funktion kleiner als, versuchen Sie:Bei diesem Ansatz kann der Prozentwert von einer asynchronen Funktion zurückgegeben und als Teil des Kontrollflusses verarbeitet werden.quelle
expect(2 + 2).not.toBe(5)
,expect(2 + 2).toBeGreaterThan(0)
,expect(2 + 2).toBeLessThan(5)
expect(NaN).not.toBeLessThan(0);
passiert, anstatt zu scheitern. (not.toBeLessThan
ist nur die Umkehrung, wenn Sie annehmen, dass diespercent
eine Zahl ist. Andernfalls ist es nicht die Umkehrung.)Sie müssen nur zuerst die Vergleichsoperation ausführen und dann überprüfen, ob sie wahr ist.
quelle
since('expected percent to be greater than or equal to zero').expect(percent >= 0).toBeTruthy();
>=
bevorzuge ich einen benutzerdefinierten Matcher, da er die Tests übersichtlich hält (einfach genug, siehe meine Antwort unten), aber für Vergleiche, die seltener oder nicht aussagekräftig genug sind, scheint dieses Plugin genau das zu sein das Richtige. Vielen Dank!expect(percent).toBeGreaterThan(-1);
xD ? Ich habe es nicht ausprobiertDie aktuelle Version von Jasmine unterstützt toBeGreaterThan und toBeLessThan.
quelle
Etwas seltsam ist dies keine grundlegende Funktionalität
Sie können einen benutzerdefinierten Matcher wie folgt hinzufügen:
JasmineExtensions.js
Tatsächlich definieren Sie einen Konstruktor für Ihren Matcher - eine Funktion, die ein Matcher-Objekt zurückgibt.
Fügen Sie dies hinzu, bevor Sie "booten". Die grundlegenden Matcher werden beim Booten geladen.
Ihre HTML-Datei sollte folgendermaßen aussehen:
Fügen Sie dann in Ihrer boot.js den Aufruf hinzu, um die Matcher hinzuzufügen, nachdem Jasmin definiert wurde, aber vor jasmine.getEnv (). Get env ist eigentlich ein (leicht irreführend benannter) Setup-Aufruf.
Die Matcher werden beim Aufruf von setupCoreMatchers im Env-Konstruktor eingerichtet.
Sie zeigen eine andere Möglichkeit, benutzerdefinierte Matcher in den Beispieltests hinzuzufügen. Die Funktionsweise besteht jedoch darin, die Matcher vor jedem einzelnen Test mit a neu zu erstellen
beforeEach
. Das scheint ziemlich schrecklich zu sein, also dachte ich, ich würde stattdessen diesen Ansatz wählen.quelle
Ich bin spät dran, aber wenn ich es noch poste, falls jemand diese Frage noch besucht, um nach Antworten zu suchen, verwende ich Jasmine Version 3.0 und wie von @Patrizio Rullo erwähnt, können Sie toBeGreaterThanOrEqual / toBeLessThanOrEqual verwenden .
Es wurde in Version 2.5 gemäß den Versionshinweisen hinzugefügt - https://github.com/jasmine/jasmine/blob/master/release_notes/2.5.0.md
Zum Beispiel
oder
quelle
Ich bin heute auf dasselbe Problem gestoßen, und wie sich herausstellt, ist es nicht so schwierig, einen benutzerdefinierten Matcher dafür hinzuzufügen. Der Hauptvorteil eines benutzerdefinierten Matchers besteht darin, dass er aussagekräftige Nachrichten zurückgeben kann, wenn ein Test fehlschlägt.
Hier ist also der Code für zwei Matcher,
.toBeAtLeast()
und.toBeAtMost()
falls er jemandem hilft.quelle
Es wurde gerade im Jasmine GitHub-Hauptzweig mein Patch zusammengeführt, um die benötigten Matcher hinzuzufügen:
Fügen Sie zu BeGreatThanOrEqual und zu BeLessThanOrEqual Matchern hinzu
Aber ich habe keine Ahnung, in welcher Veröffentlichung es sein wird. In der Zwischenzeit können Sie versuchen, den Code meines Commits in Ihrer lokalen Jasmine-Kopie zu verwenden.
quelle
Ich empfehle die Verwendung dieses Jasmine-Steckers: https://github.com/JamieMason/Jasmine-Matchers
quelle
Mit der Funktion können Sie
least
überprüfen, ob ein Wert größer oder gleich einem anderen Wert ist.Ein Alias von
least
isgte
(groß oder gleich). Umgekehrt können Sielte
das Gegenteil überprüfen (kleiner oder gleich).Um die Frage zu beantworten, können Sie Folgendes tun:
expect(percent).to.be.gte(0)
quelle
TypeError: Cannot read property 'be' of undefined
fürexpect(1).to.be.gte(-1);