我正在尝试在保存时测试一个 Backbone 模型。
这是我的代码。
从注解中可以看出,toHaveBeenCalledOnce
方法存在问题。
附言:
我使用的是Jasmine 1.2.0和Sinon.JS 1.3.4
describe('when saving', function ()
{
beforeEach(function () {
this.server = sinon.fakeServer.create();
this.responseBody = '{"id":3,"title":"Hello","tags":["garden","weekend"]}';
this.server.respondWith(
'POST',
Routing.generate(this.apiName),
[
200, {'Content-Type': 'application/json'}, this.responseBody
]
);
this.eventSpy = sinon.spy();
});
afterEach(function() {
this.server.restore();
});
it('should not save when title is empty', function() {
this.model.bind('error', this.eventSpy);
this.model.save({'title': ''});
expect(this.eventSpy).toHaveBeenCalledOnce(); // TypeError: Object [object Object] has no method 'toHaveBeenCalledOnce'
expect(this.eventSpy).toHaveBeenCalledWith(this.model, 'cannot have an empty title');
});
});
控制台.log(应为(此.事件间谍));
3条答案
按热度按时间cld4siwp1#
Jasmine没有函数
toHaveBeenCalledOnce
。您需要自己检查计数。所以我猜你会想要这个:
已更新
你现在得到的错误,“期待一个间谍,但得到了函数”就是因为这个。你正在使用一个Sinon库间谍,并将它传递给一个期待Jasmine间谍的Jasmine函数。
您应该执行以下操作之一:
或
你使用Sinon和Jasmine的理由是什么?我推荐第一个解决方案,因为当测试失败时,Jasmine将有更多的信息显示。
lnlaulya2#
有一个名为jasmine-sinon的库,它为jasmine添加了特定于sinon的匹配器。
它可以让你做一些事情,比如
iovurdzv3#
请尝试使用toHaveBeenCalledTimes方法: