首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jasmine expect逻辑(expect A OR B)

Jasmine expect逻辑(expect A OR B)
EN

Stack Overflow用户
提问于 2012-11-23 21:44:50
回答 4查看 20.7K关注 0票数 44

如果满足两个期望中的一个,我需要设置测试成功:

代码语言:javascript
复制
expect(mySpy.mostRecentCall.args[0]).toEqual(jasmine.any(Number));
expect(mySpy.mostRecentCall.args[0]).toEqual(false);

我希望它看起来像这样:

代码语言:javascript
复制
expect(mySpy.mostRecentCall.args[0]).toEqual(jasmine.any(Number)).or.toEqual(false);

有没有我在文档中遗漏了什么,或者我必须编写自己的匹配器?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-23 22:09:19

注意:此解决方案包含Jasmine v2.0之前版本的语法。有关自定义匹配器的更多信息,请参阅:https://jasmine.github.io/2.0/custom_matcher.html

Matchers.js只能使用单个'result modifier‘- not

核心/规范.js:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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;
    }
  }
}

因此,看起来您确实需要编写自己匹配器(从beforeit块中获取正确的this)。例如:

代码语言:javascript
复制
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;
   }
});
票数 12
EN

Stack Overflow用户

发布于 2017-02-19 00:42:35

将多个可比较的字符串添加到数组中,然后进行比较。颠倒比较的顺序。

代码语言:javascript
复制
expect(["New", "In Progress"]).toContain(Status);
票数 66
EN

Stack Overflow用户

发布于 2016-05-13 08:48:50

这是一个古老的问题,但如果有人还在寻找,我有另一个答案。

构建逻辑OR表达式并期待它会怎样呢?如下所示:

代码语言:javascript
复制
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中工作:)

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13530365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档