如果符合两个期望中的一个,我需要设置测试成功:
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);
我在文档中遗漏了什么,或者我是否必须编写自己的匹配器?
答案 0 :(得分:36)
将多个可比较的字符串添加到数组中然后进行比较。颠倒比较的顺序。
expect(["New", "In Progress"]).toContain(Status);
答案 1 :(得分:15)
这是一个老问题,但如果有人仍然在寻找我还有另一个答案。
如何构建逻辑OR表达式并期待它?像这样:
var argIsANumber = !isNaN(mySpy.mostRecentCall.args[0]);
var argIsBooleanFalse = (mySpy.mostRecentCall.args[0] === false);
expect( argIsANumber || argIsBooleanFalse ).toBe(true);
这样,你可以显式测试/期望OR条件,你只需要使用Jasmine来测试布尔匹配/不匹配。将在Jasmine 1或Jasmine 2中工作:)
答案 2 :(得分:11)
注意:此解决方案包含Jasmine v2.0之前版本的语法。 有关自定义匹配器的更多信息,请参阅:https://jasmine.github.io/2.0/custom_matcher.html
Matchers.js只使用一个“结果修饰符” - not
:
<强>芯/ 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;
<强>芯/ 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;
}
});
答案 3 :(得分:0)
您可以从Expect语句中删除比较,以充分利用比较运算符。
let expectResult = (typeof(await varA) == "number" || typeof(await varA) == "object" );
expect (expectResult).toBe(true);