好的,我们正在尝试使用Jasmine进行单元测试。我们的服务定义与以下服务类似:
(function () {
'use strict';
angular.module('mymodule')
.service('myservice', myservice);
myservice.$inject = ['$q', '$resource', 'progressService',
'myservice2', 'myservice3', 'ngDialog'];
function myservice($q, $resource, progressService,
myservice2, myservice3, ngDialog) {
var self = this;
self.dataListSvc2 = [];
self.dataListSvc3 = [];
self.dataFromResource = null;
self.myRoutine = myRoutine;
var myResource = $resource('/someurl/webapi/GetData');
//TRYING TO TEST THIS ROUTINE!!!
function myRoutine(param1, param2) {
return progressService.show($q.all([
myResource.get({ Param1: param1 }).$promise.then(function (response) {
self.dataFromResource = response;
}),
myRoutine2(param2),
myRoutine3(param2)
]));
}
function myRoutine2(param) {
return myservice2.getSomeData(param).then(function (response) {
var results = [];
self.dataListSvc2 = [];
response.forEach(function (item) {
item.AddField1 = null;
item.AddField2 = false;
results.push(item);
});
self.dataListSvc2 = results;
});
}
function myRoutine3(param) {
return myservice3.getSomeMoreData(param, [6])
.then(function (response) {
self.dataListSvc3 = response;
});
}
}
})();
我正在尝试为myservice.myRoutine()写一个单元测试而没有任何运气,我怀疑这是由于$ q.all数组的承诺。这是我确定的一个测试,但它并不理想,老实说,我不觉得它正在测试任何有价值的东西。我还尝试使用$ httpBackend“嘲笑”三个请求而没有运气,因为所有三个响应都返回到具有未定义值的数组中。我搜索了SO和网络,我只发现$ q.all([])单元测试引用控制器而不是服务。如果有人有一些意见,我将不胜感激。这是我暂时安顿下来的地方:
describe('My Service: ', function () {
var $httpBackend;
beforeEach(module('mymodule'));
beforeEach(inject(function ($injector) {
// Set up the mock http service responses
$httpBackend = $injector.get('$httpBackend');
}));
it('Can call myroutine from myservice', inject(function (myservice) {
//Arrange
var expectedVal1 = 1234;
var expectedVal2 = 1234;
spyOn(myservice, "myRoutine");
//Act
myservice.myRoutine(expectedVal1, expectedVal2);
//Assert
expect(myservice.myRoutine).toHaveBeenCalled();
}));
});
答案 0 :(得分:0)
使用Wikipedia伪造http请求。你也应该伪造if (c>='0' && c<='9')
++ndigit[c-'0'];
方法和myservice2.getSomeData
我猜这些方法也会创建http请求,所以你可以用同样的方式伪造它们。
myservice3.getSomeMoreData
与您手动调用无关;-)。
expect(myservice.myRoutine).toHaveBeenCalled();