我无法弄清楚如何让Jasmine检查我的测试函数中的函数是否被调用。我知道我必须使用间谍,但我显然不了解间谍的实施,因为它目前无效。
我的功能看起来像这样:
function templates($rootScope, ShareStats) {
return {
_writeToStore: function(tmpl, tmplOld) {
$rootScope.store.templates.save(tmpl);
if (tmplOld) {
ShareStats.update(tmpl, tmplOld);
} else {
ShareStats.saveAll();
}
},
}
}
我的测试看起来像这样:
describe('Unit: templates', function() {
var Templates,
rootScope,
tmplOld = {...},
tmplNew = {...};
beforeEach(function() {
module('myApp');
inject(function($injector) {...});
});
describe('Templates._writeToStore', function() {
it('should save object to $rootScope.store.templates', function() {
var _writeToStore = Templates._writeToStore(tmplNew, tmplOld);
spyOn(_writeToStore, 'rootScope.store.templates.save');
_writeToStore(tmplNew, tmplOld);
expect(rootScope.store.templates.save).toHaveBeenCalled();
});
it('should call ShareStats.update() if tmplOld is passed', function() {
var _writeToStore = Templates._writeToStore(tmplNew, tmplOld);
spyOn(_writeToStore, 'ShareStats.update');
_writeToStore(tmplNew, tmplOld);
expect(ShareStats.update).toHaveBeenCalled();
});
});
});
答案 0 :(得分:1)
你的间谍不太正确。
spyOn(_writeToStore, 'rootScope.store.templates.save');
应该是:
spyOn(rootScope.store.templates, 'save');
即函数所在的对象作为第一个参数,函数名称作为第二个参数。
问题是引用根镜