AngularJS + jasmine + karma:控制器中的服务响应模拟

时间:2015-05-25 16:20:24

标签: javascript angularjs jasmine karma-runner

我正在努力测试角度控制器方法,它在其中调用服务,例如:

function methodInController() {
service.callToService()
.success(function(){})
.error(function(){});
}

我应该如何模拟service.callToService()?因为现在karma读取控制器和抛出错误,TypeError:' undefined'不是对象< ...>靠近.error(function(){})。

1 个答案:

答案 0 :(得分:0)

使用$q创建承诺并返回。

var deferred = $q.defer();
spyOn(service, 'callToService').and.returnValue(deferred.promise);
deferred.resolve({fake: 'data'});
$scope.$digest();

expect(service.callToService).toHaveBeenCalledWith({some: 'arguments'});
expect(controller.myCuccessHandler).toHaveBeenCalled();
expect(controller.myErrorHandler).not.toHaveBeenCalled();

等。 重复并调整您的失败案例以及您想要测试的任何其他内容。