Hinweis: Diese Lösung enthält Syntax für Versionen vor Jasmine v2.0. jetzt Weitere Informationen zu benutzerdefinierten Matcher finden Sie unter: https://jasmine.github.io/2.0/custom_matcher.html
Matchers.js arbeitet mit einem einzigen 'Ergebnis Modifikator' nur - not
:
Kern/Spec.js:
jasmine.Spec.prototype.expect = function(actual) {
var positive = new (this.getMatchersClass_())(this.env, actual, this);
positive.not = new (this.getMatchersClass_())(this.env, actual, this, true);
return positive;
Kern/Matchers.js:
jasmine.Matchers = function(env, actual, spec, opt_isNot) {
...
this.isNot = opt_isNot || false;
}
...
jasmine.Matchers.matcherFn_ = function(matcherName, matcherFunction) {
return function() {
...
if (this.isNot) {
result = !result;
}
}
}
So sieht es aus, als müssten Sie in der Tat Ihren eigenen Matcher schreiben (aus einem before
oder it
Block für korrekte this
). Zum Beispiel:
this.addMatchers({
toBeAnyOf: function(expecteds) {
var result = false;
for (var i = 0, l = expecteds.length; i < l; i++) {
if (this.actual === expecteds[i]) {
result = true;
break;
}
}
return result;
}
});
Ich überprüfte die Dokumentation und ich versuchte ein wenig Code, aber ich denke, wir können das nicht "einfach" leid tun. Aber nach dem was ich gefunden habe, kannst du deinen eigenen "kettenfähigen" Matcher erstellen. – Magus