gpt4 book ai didi

javascript - 未注入(inject)模拟服务,但正在注入(inject)实际服务

转载 作者:行者123 更新时间:2023-11-28 13:22:48 24 4
gpt4 key购买 nike

我正在尝试测试使用服务的 Controller 。当我在注入(inject)函数中运行以下测试和断点时,将注入(inject)实际服务而不是模拟服务。为什么通过 $provider.factory 定义的服务没有被注入(inject)?

"use strict";

describe("contestantController", function () {
var dataService, rootScope, scope, passPromise, contestantController;

beforeEach(function(){
module(function ($provide) {

//mock service
$provide.factory('contestantDataService', ['$q', function ($q) {
function save(data){
if(passPromise){
return $q.when();
} else {
return $q.reject();
}
}
function getData() {
if (passPromise) {
return $q.when(smallDataSet());
} else {
return $q.reject();
}
}
return {
addContestant: save,
getContestants: getData,
};
}]);

});

module('contestantApp');
});

beforeEach(inject(function ($rootScope, $controller, contestantDataService) {
rootScope = $rootScope;
scope = $rootScope.$new();
dataService = contestantDataService;

spyOn(dataService, 'getContestants').and.callThrough();

contestantController = $controller('contestantController', {
$scope: scope,
contestantDataService: dataService
});
}));

it('should call getContestants method on contestantDataService on calling saveData', function () {

passPromise = true;
rootScope.$digest();

expect(dataService.getContestants).toHaveBeenCalled();
expect(scope.contestants).toEqual(smallDataSet());
});

});

最佳答案

泰勒的答案可行,但推理有点不对劲。

module() 函数只是注册模块或模块初始化函数,inject() 函数稍后将使用它们来初始化 Angular 注入(inject)器。它绝不会将模拟服务与模块链接起来。

您的代码不起作用,因为服务注册的顺序很重要。您的代码首先注册一个模拟 contestantDataService,然后注册 contestantApp 模块,该模块包含自己的 contestantDataService,覆盖注册的模拟。如果您只是将 module('contestantApp') 调用移至顶部,它应该按预期工作。

所以这意味着下面的两个 block 是等效的并且都可以工作......

beforeEach(function(){
module('contestantApp');
module(function ($provide) {
...
});
);

beforeEach(function(){
module('contestantApp', function ($provide) {
...
});
);

关于javascript - 未注入(inject)模拟服务,但正在注入(inject)实际服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31778706/

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