Angularjs 如何使用HTTPGET为angular服务编写Jasmine测试?
我已经读了几篇文章,但仍然不能为我找到解决办法。我有一个角度服务Angularjs 如何使用HTTPGET为angular服务编写Jasmine测试?,angularjs,http,jasmine,Angularjs,Http,Jasmine,我已经读了几篇文章,但仍然不能为我找到解决办法。我有一个角度服务 App.factory('PoolService', ['$http', '$q', function($http, $q){ return { fetchAllPools: function() { return $http.get('http://localhost:5555/demo/pools/').then( ... 还有一个角度控制器,
App.factory('PoolService', ['$http', '$q', function($http, $q){
return {
fetchAllPools:
function() {
return $http.get('http://localhost:5555/demo/pools/').then( ...
还有一个角度控制器,它使用服务
App.controller('PoolController', ['$scope', 'PoolService', function($scope, PoolService) {
var self = this;
self.pool={id:null,name:'', description:''};
self.pools=[]; ...
现在我正试图为控制器编写一个Jasmine单元测试,它看起来像:
describe('pool', function () {
beforeEach(module('myApp'));
var $controller;
beforeEach(inject(function(_$controller_){
$controller = _$controller_;
}));
describe('pool list', function () {
it('after fetching pools the pool list should contain elements', function () {
var $scope = {};
var controller = $controller('PoolController', { $scope: $scope});
controller.fetchAllPools();
expect($scope.pools).toBeDefined();
});
});
});
fetchAllPools()的实现
我的问题是服务不执行http.get请求——它只是在无休止地等待
有人能帮忙吗?我做错了什么
谢谢 在控制器测试中模拟服务:
it('after fetching pools the pool list should contain elements', inject(function(PoolService, $q, $rootScope) {
var $scope = $rootScope.$new();
spyOn(PoolService, 'fetchAllPools').and.returnValue($q.when([]));
var controller = $controller('PoolController', { $scope: $scope });
controller.fetchAllPools();
$scope.$apply();
expect($scope.pools).toBeDefined();
});
它是angular还是angular js?您可以共享controller.fetchAllPools()的实现吗?它是angular js。下面是fetchAllPools的实现:fetchAllPools:fetchAllPools:function(){return$http.get('(函数(响应){return response.data;},函数(errResponse){console.error('error while fetching pools');return$q.reject(errResponse);});},非常感谢,http请求现在已执行!我的测试仍然失败:Chrome 58.0.3029(Mac OS X 10.11.6)池池列表获取池后池列表应包含未定义的元素。at Object。(/…pool.test.js:31:27)at Object.e[as invoke](lib/angular.min.js:38:477)at Object.workFn(lib/angularmocks.js:2420:20)它不可能被执行,因为上面代码的全部要点是模拟服务,即用返回空数组的伪实现替换其实际实现。即使调用了真正的服务,$httpBeckend服务本身也会被单元测试模拟:我明白了!非常感谢!有没有办法测试http服务我已经给了你一个链接,解释了如何使用$http测试代码。
it('after fetching pools the pool list should contain elements', inject(function(PoolService, $q, $rootScope) {
var $scope = $rootScope.$new();
spyOn(PoolService, 'fetchAllPools').and.returnValue($q.when([]));
var controller = $controller('PoolController', { $scope: $scope });
controller.fetchAllPools();
$scope.$apply();
expect($scope.pools).toBeDefined();
});