我试图在我的单元测试中使用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;
我很乐意提供所需的任何其他信息。谢谢!
答案 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();
});
})