14

我使用业力,茉莉花为角度编写单元测试。试着写:

expect(item).toEqual(jasmine.any(Boolean));

但得到:

Expected true to equal <jasmine.any(function Boolean() { [native code] })>.

毫米..也许我做错了什么)还是在这种情况下编写价值测试的另一种方式:

if (true or false) - 通过,如果有其他 - 失败

4

4 回答 4

12

我认为您需要的是一个像这样的自定义匹配器:

toBeBoolean : function () {
  return {
    compare : function (actual, expected) {
      return {
        pass : (typeof actual === 'boolean'),
        message : 'Expected ' + actual + ' is not boolean'
      };
    }
  };
}

如何创建自定义匹配器

于 2014-01-20T14:49:10.707 回答
9

也可以:

expect(item).toMatch(/true|false/);
于 2014-08-18T12:07:32.250 回答
6

我希望您的代码按预期工作,但显然在这种情况下,茉莉花的行为有点奇怪。

我会向您推荐以下解决方法:

expect(typeof item).toEqual('boolean');

于 2015-04-24T11:24:32.723 回答
1

对我来说,标记的解决方案是不正确的。至少不是我期望的那样使用它。我是这样做的:

jasmine.addMatchers({
    toBeBoolean: function () {
        return {
            compare: function (actual, expected) {
                return {
                    pass: typeof actual === 'boolean',
                    message: 'Expected ' + actual + ' is not boolean'
                };
            }
        };
    }
});

因为您没有传递预期值,而只是传递了实际值。所以你会调用它的方式是:

expect(true|false).toBeBoolean();
于 2016-05-24T00:20:24.717 回答