chai spy传递to.be.spy断言,但抛出错误.called()“不是间谍或对间谍的召唤”

时间:2015-11-17 20:22:47

标签: chai spy karma-mocha

我试图在我的单元测试中使用chai间谍。我正在使用业力,摩卡,柴和sinon。

我最初尝试使用chai间谍来验证我提供的角度应用程序中的回调。但是为了解决这个错误,我把我的测试用例归结为我认为非常简单的一个。

我有以下单元测试

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;

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

1 个答案:

答案 0 :(得分:0)

我不是一个chai spies专家,但是我遇到类似的问题让chai间谍工作。

我刚测试了这个功能,似乎缺少了#34;)"支架在最后;也许这是一个复制和粘贴错误?

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间谍测试。

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();
  });
})