模拟服务注入 Angular 模块 运行 块
Mock service injected into Angular module run block
在我的 module.run 块中,它正在调用我提供的服务的方法。当 运行 进行我的测试时,我希望它引用模拟服务而不是发出 http 请求的真实服务。我目前正在尝试测试控制器,而不是实际的 运行 块本身 - 如何将模拟服务注入 运行 函数?我试过使用 $provide.factory 但它似乎没有做任何事情并且仍在正常加载服务。
我正在使用 Jasmine 编写我的测试。
app.js
angular.module("app")
.run(function(MyService) {
MyService.log("starting app");
});
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() });
}));
...........
});
在这种情况下是重要的顺序。
您需要先加载您的应用程序
beforeEach(module("app"));
然后覆盖 MyService 定义。
beforeEach(
module({
"MyService": {
log: function(message) {
console.log("MyFakeService called: " + message);
}
}
})
);
否则应用服务实现是上次注册和使用的。
工作示例在这里 - 查看控制台 http://plnkr.co/edit/BYQpbY?p=preview
在我的 module.run 块中,它正在调用我提供的服务的方法。当 运行 进行我的测试时,我希望它引用模拟服务而不是发出 http 请求的真实服务。我目前正在尝试测试控制器,而不是实际的 运行 块本身 - 如何将模拟服务注入 运行 函数?我试过使用 $provide.factory 但它似乎没有做任何事情并且仍在正常加载服务。
我正在使用 Jasmine 编写我的测试。
app.js
angular.module("app")
.run(function(MyService) {
MyService.log("starting app");
});
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() });
}));
...........
});
在这种情况下是重要的顺序。
您需要先加载您的应用程序
beforeEach(module("app"));
然后覆盖 MyService 定义。
beforeEach(
module({
"MyService": {
log: function(message) {
console.log("MyFakeService called: " + message);
}
}
})
);
否则应用服务实现是上次注册和使用的。
工作示例在这里 - 查看控制台 http://plnkr.co/edit/BYQpbY?p=preview