在工厂中测试功能
Testing a function in factory
.factory('Tag', function($window) {
var Context = {};
function reset() {
return Context !== {} ? Context : {};
}
return{
reset:reset
};
})
我做过这样的测试
describe('method: reset()', function(){
it('should reset the Context variable', function(){
spyOn(Tag, 'reset').andCallFake(function(){
return Context;
});
expect(Context).toEqual({});
});
afterEach(function(){
if(Context!== {}){
Context = {};
}
})
});
是,这个测试是准确的,如果是,那为什么我的测试覆盖率没有增加..
您正在调用一个假函数,而不是真正的函数,因此您实际函数中的代码永远不会执行。
您的代码覆盖工具仅标记实际命中的代码。
andCallFake 用于模拟您对测试不感兴趣的外部函数,您只需要在实际测试的代码调用它时得到一些模拟响应。
您的代码应该真正调用...
Tag.reset()
现在,如果 Tag.reset() 调用另一个您不想测试的服务中的代码,那么您可以在该调用上使用 callFake。
请记住这是 "unit" 测试。您要测试的 "unit" 代码是服务内部的代码,而不是服务外部的代码。
.factory('Tag', function($window) {
var Context = {};
function reset() {
return Context !== {} ? Context : {};
}
return{
reset:reset
};
})
我做过这样的测试
describe('method: reset()', function(){
it('should reset the Context variable', function(){
spyOn(Tag, 'reset').andCallFake(function(){
return Context;
});
expect(Context).toEqual({});
});
afterEach(function(){
if(Context!== {}){
Context = {};
}
})
});
是,这个测试是准确的,如果是,那为什么我的测试覆盖率没有增加..
您正在调用一个假函数,而不是真正的函数,因此您实际函数中的代码永远不会执行。
您的代码覆盖工具仅标记实际命中的代码。
andCallFake 用于模拟您对测试不感兴趣的外部函数,您只需要在实际测试的代码调用它时得到一些模拟响应。
您的代码应该真正调用...
Tag.reset()
现在,如果 Tag.reset() 调用另一个您不想测试的服务中的代码,那么您可以在该调用上使用 callFake。 请记住这是 "unit" 测试。您要测试的 "unit" 代码是服务内部的代码,而不是服务外部的代码。