【问题标题】:Jasmine - any boolean (jasmine.any(Boolean))Jasmine - 任何布尔值 (jasmine.any(Boolean))
【发布时间】:2014-02-09 18:54:17
【问题描述】:

我使用 karma, jasmine 为 Angular 编写单元测试。试着写:

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

但是得到了:

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

mm.. 也许我做错了什么)或者在这种情况下它是另一种编写价值测试的方法:

如果(真或假) - 通过,如果有其他 - 失败

【问题讨论】:

  • item的期望值是多少?
  • 我有item = true;
  • @Dalorzo 好的,有什么解决方案?

标签: angularjs unit-testing karma-jasmine


【解决方案1】:

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

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

How to create a Custom Matcher

【讨论】:

  • 很高兴它对您有所帮助。这也是为更复杂的场景扩展 Jasmine 的好方法
  • 看不懂expected的用法。
  • 通过应该是(typeof actual === 'boolean') 而不是预期的
【解决方案2】:

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

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

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

expect(true|false).toBeBoolean();

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      也可以:

      expect(item).toMatch(/true|false/);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-11
        • 1970-01-01
        • 2019-04-05
        • 2016-04-26
        • 2013-11-30
        • 2011-04-14
        • 2023-03-05
        • 1970-01-01
        相关资源
        最近更新 更多