Jasmine .calls.count 和 .calls.any 抛出错误

Jasmine .calls.count and .calls.any throwing error

我正在尝试测试 .calls.count().calls.any,我尝试了此 link Jasmine test cases

中的以下代码

describe("A spy", function() {
  var foo, bar = null;

  beforeEach(function() {
    foo = {
      setBar: function(value) {
        bar = value;
      }
    };

    spyOn(foo, 'setBar');
  });



  it("tracks if it was called at all", function() {
    expect(foo.setBar.calls.any()).toEqual(false);

    foo.setBar();

    expect(foo.setBar.calls.any()).toEqual(true);
  });



  it("tracks the number of times it was called", function() {
    expect(foo.setBar.calls.count()).toEqual(0);

    foo.setBar();
    foo.setBar();

    expect(foo.setBar.calls.count()).toEqual(2);
  });

});

但这会引发错误:

TypeError: 'foo.setBar.calls.any' is not a function

TypeError: 'foo.setBar.calls.count' is not a function

我检查了语法,网上到处都是一样的。怎么了?

有点愚蠢的问题,但您确定您没有不小心使用 Jasmine 1.3 吗? calls 在那里也是有效的 属性,但它还没有 any()count() 方法,您在 2.0 文档中引用了这些方法。

(我在从1.3迁移到2.0的过程中遇到过很多类似的错误,因为语法非常相似,所以错误不是一眼就能看出来的。)

我遇到了类似的问题,然后查了一下这个。上面的答案是正确的,我设法通过在我的 testem.json 中明确包含对 "jasmine2" 的引用来修复它,而不仅仅是 "jasmine":

{
   "framework": "jasmine2",
   "src_files": [
      "filePath1.js",
      "filePath2.js",
      "filePathEtc.js"
   ]
}