我有一个像这样的简单组件:
.component('myComponent', {
templateUrl: 'example.html',
controller: function() {
function serviceCall() {}
serviceCall();
}
});
我想要做的是监视serviceCall方法以返回一些预定义的json。问题是要获得控制器,我需要做一些像
这样的事情var myComponent = angular.element('<my-component><my-component>');
myComponent.element.controller('myComponent');
但是在创建组件之前我无法调用它,并且我无法创建组件,因为我还没有模拟方法调用。
如何绕过这个捕获22?
答案 0 :(得分:1)
不幸的是,几乎没有办法解决它。
但是,假设您的serviceCall()
函数在内部调用服务中的函数,您可以窥探它。 (记住Angular良好实践 - 关注点分离原则)
假设你的代码:
.component('myComponent', {
templateUrl: 'example.html',
controller: function(SomeService) {
function serviceCall() {
SomeService.someFunction();
}
serviceCall();
}
});
您可以在测试中注入服务并监视期望被调用的函数:
var SomeService;
beforeEach(inject(function (_SomeService_) {
SomeService = _SomeService_;
}));
it('should call someFunction', function () {
spyOn(SomeService, 'someFunction').and.returnValue({
then: function () { // Mimic a promise
return ... mocked object ... ;
}
});
// Instantiate the controller
expect(SomeService.someFunction).toHaveBeenCalled();
// Expect stuff to have happened in the controller with the returned value
});
希望这会有所帮助:)