gpt4 book ai didi

angularjs - 模拟服务注入(inject) Angular 模块运行 block

转载 作者:行者123 更新时间:2023-12-02 23:56:23 26 4
gpt4 key购买 nike

在我的 module.run block 中,它正在调用我制作的服务上的方法。运行测试时,我希望它引用模拟服务,而不是发出 http 请求的真实服务。我目前正在尝试测试 Controller ,而不是实际的运行 block 本身 - 如何将模拟服务注入(inject)到运行函数中?我尝试过使用 $provide.factory 但它似乎没有做任何事情并且仍在正常加载服务。

我正在使用 Jasmine 来编写我的测试。

app.js

angular.module("app")
.run(function(MyService) {
MyService.log("starting app");
});

测试.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

关于angularjs - 模拟服务注入(inject) Angular 模块运行 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32432297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com