【发布时间】:2017-10-16 06:46:45
【问题描述】:
当使用 sinon spy 测试主干模型的事件时,它会错误地出错:expected doSomething to be called once but was called 0 times,尽管它似乎在将控制台日志放入方法体时执行。测试函数如下:
it('Y U NO WORK', function() {
const events = {};
_.extend(events, Backbone.Events);
const Model = Backbone.Model.extend({
initialize: function() {
this.listenTo(events, 'doSomething', this.doSomething);
},
doSomething: function() {},
});
const model = new Model();
const spy = sinon.spy(model, 'doSomething');
events.trigger('doSomething');
sinon.assert.calledOnce(spy);
});
我知道要修复,您必须将 sinon spy 放在模型的原型上,例如 const spy = sinon.spy(Model.prototype, 'doSomething'); 在 new Model() 调用之前的行中,但是在放入模型实例时它似乎可以正常工作,如下:
it('And this does work', function() {
const Model = Backbone.Model.extend();
const model = new Model();
const spy = sinon.spy(model, 'set');
model.set('foo', 'bar');
sinon.assert.calledOnce(spy);
});
很好奇为什么它需要在第一个实例中放在模型的原型上,但在第二个实例中可以在模型实例上工作?
【问题讨论】:
标签: backbone.js karma-runner sinon backbone-events sinon-chai