我有一个简单的service
查询api
,使用promises
为controllers
获取一些数据。我想使用jasmine
单独测试服务。但是,服务依赖于我注入的一些常量来获取api urls
。
以下是服务的定义方式:
angular.module('dbRequest', [])
.factory('Request', ['$http', 'localConfig', function($http, localConfig){
return {
getRevision: function(){
return $http({
url: localConfig.data,
method: "GET",
crossDomain: true,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
})
}
}]);
localConfig
被定义为app.js
中的常量。关注this tutorial,以下是我测试服务的方式:
describe('Service: Request', function () {
// load the controller's module
beforeEach(module('webApp'));
var reqService, $q, $scope, lc;
beforeEach(function(){
inject(function($injector){
reqService = $injector.get('Request');
$q = $injector.get('$q');
lc = $injector.get('localConfig');
$scope = $injector.get('$rootScope').$new();
});
});
it('should test service definition', function(done){
expect(reqService).toBeDefined();
done();
});
it('should get db revision', function(done){
spyOn(reqService, ['getRevision']).and.returnValue($q.when({/*what comes here??*/}));
reqService.getRevision().then(function(res){
expect(res.length).toBe(1);
done();
});
$scope.$digest();
});
});
我需要测试从api(这是一个数组)返回的数据长度是否大于0.这决定了在这种情况下测试是否通过。这带来了两个问题:
service
?我的回答如下:
data: ["option1", "option2"]