1

我试图在我的单元测试中使用 chai 间谍。我正在使用 karma、mocha、chai 和 sinon。

我最初试图使用 chai 间谍来验证我的 Angular 应用程序中的回调是否在提供时被调用。但是为了解决这个错误,我将我的测试用例归结为我认为非常简单的一个。

我有以下单元测试

describe('spy tests:', function() {

  it('should be spy', function() {

    var spy = chai.spy();
    expect(spy).to.be.spy;
  });

  it('should have been called', function() {
    var spy = chai.spy();
    spy();
    expect(spy).to.have.been.called();
  });
}

第一个“应该是间谍”测试通过了,据我所知,这意味着实际上正在创建一个间谍。但是,第二次测试失败并出现以下错误:

TypeError: { [Function]
toString: { [Function: toString] bind: { [Function: bind] bind:        [Circular] } },
reset: { [Function] bind: { [Function: bind] bind: [Circular] } },
__spy: { calls: [ [] ], called: true, name: undefined },
bind: { [Function: bind] bind: [Circular] } } is not a spy or a call to a spy!

这尤其令人沮丧,因为我刚刚在之前的“应该是间谍”断言中验证了它是间谍。

以下是我的框架,因为我将它们包含在我的 karma.conf.js 中:

frameworks: ['chai-as-promised', 'chai-things', 'chai-spies', 'sinon-chai', 'chai', 'mocha']

更令人沮丧的是,以下断言确实通过了:

expect(spy.__spy.called).to.be.true;

我很乐意提供所需的任何其他信息。谢谢!

4

1 回答 1

0

我不是 chai 间谍专家,但我在让 chai spy 工作时遇到了类似的问题。

我刚刚测试了这个功能,最后似乎缺少一个“)”括号;也许这是一个复制和粘贴错误?

describe('spy tests:', function() {

  it('should be spy', function() {

    var spy = chai.spy();
    expect(spy).to.be.spy;
  });

  it('should have been called', function() {
    var spy = chai.spy();
    spy();
    expect(spy).to.have.been.called();
  });
});

如果这不是问题,那么我可以通过用 spy 覆盖我的函数变量来创建成功的 chai spy 测试。

function functionA() {

}

function thatCallsFunctionA() {
  functionA();
}

describe('Function thatCallsFunctionA', function() {
  it('Should call functionA', function() {
    var functionA = spy(functionA);
    thatCallsFunctionA();
    expect(functionA).to.have.been.called();
  });
})
于 2016-05-27T16:35:42.787 回答