嘿,我是AngularJS测试的新手,我想弄明白,
我应该如何测试负责我的休息电话的AngularJS服务。
如何在我想测试的其他控制器中调用此服务。
我需要测试使用rest请求的datafactory服务 需要测试的代码是这样的:
select 100.0 * count(b.memberID) / count(a.memberID)
from tableA a
left join tableB b on a.memberID = b.memberID and a.entryDate BETWEEN '20160501' AND '20160515'
var app = angular.module("app",[]);
app.controller("mainCTRL", ["$scope","dataFactory",function($scope,dataFactory){
$scope.title = "Hello World";
dataFactory.getEntries("fakeSuffix");
}]);
app.factory('dataFactory', ['$http', '$window', '$log', function ($http, $window, $log) {
var urlBase = $window.location.origin + '/api',
dataFactory = {};
/**
* get all Entries.
**/
dataFactory.getEntries = function (suffix) {
$log.debug("************ Get All Entries ************");
$log.debug("url:", urlBase + suffix);
return $http.get(urlBase + suffix, { headers: { cache: false } });
};
/**
* get single Entry.
**/
dataFactory.getEntry = function (id) {
$log.debug("************ Get Single Entry ************");
return $http.get(urlBase + '/' + id);
};
/**
* insert Entry
**/
dataFactory.postEntry = function (method, entry) {
var url = urlBase + '/' + method;
return $http.post(url, entry);
};
/**
* update Entry
**/
dataFactory.updateEntry = function (entry) {
$log.debug("************ Update Single Entry ************");
return $http.put(urlBase + '/' + entry.id, entry);
};
/**
* delete Entry
**/
dataFactory.deleteEntry = function (id) {
$log.debug("************ Delete Single Entry ************");
return $http.delete(urlBase + '/' + id);
};
return dataFactory;
}]);
答案 0 :(得分:1)
试一试,回答这个问题Injecting a mock into an AngularJS service
module(function($provide) {
$provide.value('$http', {
get: function(url, options) {
// your get implementation
},
post: function(url, data) {
// your post implementation
},
'delete': function(url) {
// your delete implementation
},
put: function(url, data) {
// your put implementation
}
});
});
答案 1 :(得分:1)
据我所知,要测试服务,请创建类似于控制器的Jasmine测试用例,不要使用控制器初始化。
要根据服务响应测试控制器,请为相应的服务创建spyOn并模拟服务响应。
答案 2 :(得分:1)
Q.1 - 我应该如何测试一个负责我的休息电话的AngularJS服务。
Ans。 - 我已经写了一个您的某项服务的测试用例'方法如下。您可以为其他方法编写类似的测试用例。
Q.2 - 如何在我想测试的其他控制器中调用此服务。
Ans。 - 在下面的代码中,当你正在为您的服务编写测试用例,该测试用例依赖于$http
的{{1}},get
,post
和put
方法,I'在测试用例中注入了delete
并在$httpBackend
块中模拟了所有这些方法。同样,当您为控制器编写依赖于此服务的测试用例时,您将不得不使用类似的方法。只需在服务器的测试用例中注入服务,然后模拟从控制器调用的所有服务方法。
beforeEach
希望这有帮助。