我有一个控制器,可以在加载时立即从服务中获取一些数据。
angular.module('app').controller("MyController", function (myService) {
var projectId = myservice.project.id;
});
此数据是从应用程序中的上一个操作设置的。因此,当karma / jasmine将此控制器加载到新状态时,此服务不会拥有此数据。我曾尝试在beforeEach区块中嘲笑这项服务,但没有任何运气。
beforeEach(function () {
var myService = {
project: {
id: 'thadsfkasj'
}
}
});
我错过了什么?
答案 0 :(得分:0)
您可以使用angular.value
模拟您的服务。这应该允许您将myService
注入您的控制器。
angular.module('myServiceMock', [])
.value('myService',
{
project: {
id: 'thadsfkasj'
}
});
beforeEach(module(
'myServiceMock'
//other modules or mocks to include...
));
答案 1 :(得分:0)
你也在使用ngMock吗?
如果是这样,您应该执行以下操作:
beforeEach(module(function ($provide) {
var myService = {
project: {
id: 'thadsfkasj'
}
}
$provide.value('myService', myService);
}));
答案 2 :(得分:0)
无需处理注入$ provide或overriding模块,只需在测试中实例化控制器时传入代表模拟的对象。
beforeEach(inject(function (_$controller_) {
myMockService = {
project: {
id: 100
}
};
ctrl = _$controller_('MyController', {
...
myService: myMockService
...
});
}));