2つの期待のいずれかが満たされた場合にテストを成功させる必要があります。
expect(mySpy.mostRecentCall.args[0]).toEqual(jasmine.any(Number));
expect(mySpy.mostRecentCall.args[0]).toEqual(false);
私はそれが次のようになることを期待しました:
expect(mySpy.mostRecentCall.args[0]).toEqual(jasmine.any(Number)).or.toEqual(false);
ドキュメントで見逃したものはありますか、または独自のマッチャーを作成する必要がありますか?
注:このソリューションには、Jasmine v2.0より前のバージョンの構文が含まれています。カスタムマッチャーの詳細については、以下を参照してください。 https://jasmine.github.io/2.0/custom_matcher.html
Matchers.jsは単一の「結果修飾子」でのみ機能します-not
:
core/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;
core/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;
}
}
}
したがって、実際に独自のマッチャーを作成する必要があるようです(before
またはit
ブロック内から正しいthis
を取得するため)。例えば:
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;
}
});
比較可能な複数の文字列を配列に追加して比較します。比較の順序を逆にします。
expect(["New", "In Progress"]).toContain(Status);
これは古い質問ですが、誰かがまだ探している場合に備えて、別の答えがあります。
論理的なOR=式を作成し、それを期待するだけですか?このように:
var argIsANumber = !isNaN(mySpy.mostRecentCall.args[0]);
var argIsBooleanFalse = (mySpy.mostRecentCall.args[0] === false);
expect( argIsANumber || argIsBooleanFalse ).toBe(true);
このように、OR条件を明示的にテスト/期待でき、ブール値の一致/不一致をテストするためにJasmineを使用する必要があるだけです。Jasmine1またはJasmine 2で機能します:)