gpt4 book ai didi

angularjs - 在测试 Angular Controller 的同时在服务中使用 $httpBackend

转载 作者:行者123 更新时间:2023-12-04 15:59:11 25 4
gpt4 key购买 nike

我正在尝试在我的 Angular 框架中测试 Controller :

.controller('UserCtrl', ['$scope', '$location', 'User', 'Config',
function ($scope, $location, User, Config) {
...
}])

这个 Controller 依赖于几个需要 $http 对象来进行服务器调用的服务:
.factory('User', ['$http', function ($http) {
var data = {};

return {
query: function(oper, putdata, callback){
if(oper == 'get'){
$http.get(getUrl("user",null)).success(function(data2) {
console.log(data2);

callback(data2);
data.userinfo = data2;
});
},

userinfo: data
};
}])

但是当我尝试引导 Controller 时,我无法让 httpBackend 工作:
describe('UserCtrl', function(){

var ctrlScope, ctrl, $httpBackend, controllerService;

beforeEach(
inject(function($httpBackend, $http, $rootScope, $controller, User, Config) {
_User = User;
_Config = Config;
spyOn(User, 'getUserInfo').andCallThrough();
//spyOn(User, 'query').andCallThrough();

ctrlScope = $rootScope.$new();
controllerService = $controller;
httpMock = $httpBackend;

})
);

it('should create setup userinfo object ', function() {
httpMock.expectGET("/user/default/details").
respond({somejson});

ctrl = controllerService('UserCtrl', {$scope: ctrlScope, $location: location, User: _User, Config: _Config});
expect(_User.getUserInfo).toHaveBeenCalled();
httpMock.flush();
expect(ctrlScope.userinfo.length).toBe(1);

});
});

我得到的只是:
Error: No pending request to flush !

那么是否可以将 httpBackend 与您从正在测试的 Controller 调用的服务一起使用?

最佳答案

您是否有理由要专门测试 GET 请求?这是您的用户服务的实现细节。

无论您的函数是称为 query() 还是 getUserInfo(),我怀疑您真正想知道的是该函数是在您的用户服务上调用的。由用户服务拥有自己的一组测试来测试是否向/user/defaults/details 发出了 GET 请求。

这背后的原因是,当您更改用户服务的实现时,您不希望不相关的单元测试中断。当您的 API 更改为 /user/query 时会发生什么情况?您的 UserCtrl 测试不应中断,任何其他使用 User 服务的 Controller 也不应中断。如果您的 UserCtrl 在 User 服务上调用 getUserInfo() ,那么就您而言,它正在做正确的事情。您的用户服务单元测试将会中断,一旦您修复它们以指向您的新 URL,一切都会恢复正常。

关于angularjs - 在测试 Angular Controller 的同时在服务中使用 $httpBackend,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16810768/

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