Hea*_*rts 3 unit-testing mocking inject jasmine angularjs
在我的module.run块中,它正在调用我所做的服务上的方法.在运行我的测试时,我希望它引用模拟服务而不是正在发出http请求的模拟服务.我目前正在尝试测试一个控制器,而不是实际的运行块本身 - 如何将模拟服务注入到run函数中?我尝试过使用$ provide.factory,但它似乎没有做任何事情,仍然正常加载服务.
我正在使用Jasmine来编写我的测试.
app.js
angular.module("app")
.run(function(MyService) {
MyService.log("starting app");
});
Run Code Online (Sandbox Code Playgroud)
test.js
describe("MyController", function() {
beforeEach(function() {
module(function ($provide) {
$provide.factory("MyService", { log: function(){} });
});
});
// I want module 'app' to execute its run function using injected value for MyService
beforeEach(module("app"));
beforeEach(inject(function($controller, $rootScope) {
MyController = $controller("MyController", { $scope: $rootScope.$new() });
}));
...........
});
Run Code Online (Sandbox Code Playgroud)
在这种情况下是重要的顺序.
您需要先加载您的应用
beforeEach(module("app"));
Run Code Online (Sandbox Code Playgroud)
然后覆盖MyService定义.
beforeEach(
module({
"MyService": {
log: function(message) {
console.log("MyFakeService called: " + message);
}
}
})
);
Run Code Online (Sandbox Code Playgroud)
否则,最后会注册并使用应用服务实施.
工作示例在这里 - 查看控制台http://plnkr.co/edit/BYQpbY?p=preview
| 归档时间: |
|
| 查看次数: |
2990 次 |
| 最近记录: |