我正在尝试对我的控制器进行单元测试。我试图进行单元测试的功能是:
function myFunction() {
MyService
.myMethod(thing1, thing2)
.then(function handleMyMethod(result) {
SomeModule.errorHandler(result)
.onSuccess(function onSuccess() {
// do stuff
})
.onError(function onError() {
// do stuff
});
});
}
相关测试文件摘要:
var MockService = {
myMethod: function(thing1, thing2) {
var promise = $q.defer().promise;
return promise;
}
};
beforeEach(module(function($provide) {
$provide.value('MyService', MockService);
}));
beforeEach(inject(function (_$controller_, _MyService_, _SomeModule_, ...) {
...
MyService = _MyService_;
MyController = _$controller_('MyController as Ctrl', {
$controller: controller,
MyService: MockService,
});
我对如何编写允许我同时触及onSuccess和onError情况的测试感到困惑。我试图覆盖分支覆盖的两个分支,但不知道语法如何工作。
答案 0 :(得分:0)
您可以采取以下两种方式之一:
myMethod:function(thing1, thing2) { if (thing1=='all good') return $q.when('excellent'); return $q.reject('sorry, bud'); }
it('is a success', function() { spyOn(MockService, 'myMethod').and.returnValue($q.when('excellent'); $rootScope.$apply( MyController.doStuff('foo'); ); expect(MyController.someProperty).toEqual('excellent'); }); //etc.
请注意,您不需要使用提供代码覆盖模块注入器,并在$ controller locals参数中提供模拟服务。