我是茉莉花的新手!
我的服务包含以下代码
function getSomeData() {
return $http(
{
method: 'GET',
url: $localStorage.serverName + 'w_service_json.get_wf_proc?pn_login_id=' + sessionService.getUserId()
}).then(function (response) {
var lv_json = JSON.stringify(response.data);
var myArr = JSON.parse(lv_json);
return myArr;
}).catch(function (err) {//console.log(err);
var val = err.message || (err.status==-1?'server error':'error');
errService.add(val);
return err;
});
}
和错误处理服务(errService)如下:
angular
.module('err')
.service('errService', errService);
errService.$inject = ['$mdDialog'];
function errService($mdDialog) {
var self = this;
var erros=[];
self.add = add;
self.show = show;
return self;
function add(err)
{
erros.push(err);
throw err;
}
我需要确保服务正在处理错误,所以我在茉莉花中进行了测试:
beforeEach(inject(function (_errService_,_$rootScope_,_sessionService_,_wfActivitiesRemoteService_,_$localStorage_,_$state_, $httpBackend) {
$scope=_$rootScope_;
errService=_errService_;
wfActivitiesRemoteService = _wfActivitiesRemoteService_;
state=_$state_;
$localStorage=_$localStorage_;
$localStorage.serverName="http://someserverip/";
sessionService=_sessionService_;
httpBackend = $httpBackend;
httpBackend.whenGET(/\.html$/).passThrough();
}));
it("sem sessao", function () {
spyOn(sessionService, "getUserId").and.returnValue("");
httpBackend.expectGET('http://someserverip/w_service_json.get_wf_proc?pn_login_id=').respond(-1,errServer);
var test=function(data)
{
expect(data).toEqual('');
console.log("test");
};
var fail=function(err)
{
expect(err).not.toBeUndefined();
console.log("fail");
};
var run=function()
{
wfActivitiesRemoteService.getSomeData().then(test).catch(fail);
};
expect(function() {wfActivitiesRemoteService.getSomeData}).toThrow('server error');
run();
httpBackend.flush();
});
我无法进入功能失败!服务中的承诺失败,测试自动失败而没有进入测试内的捕获!
我该如何解决这个问题? 解决这个问题的正确方法是什么?
答案 0 :(得分:0)
我找到了解决方案!需要在测试中捕获异常而不是承诺!所以我不得不将代码更改为:
var test=function(data)
{
console.log("test:"+data);
expect(data).toEqual('');
};
var fail=function(err)
{
console.log("fail");
expect(err).not.toBeUndefined();
expect(err).toEqual('server error');
};
var run=function()
{
console.log('run');
wfActivitiesRemoteService.getSomeData().then(test).finally(done);
};
try
{
spyOn(sessionService, "getUserId").and.returnValue("");
httpBackend.expectGET('http://someserverip/w_service_json.get_wf_proc?pn_login_id=').respond(-1,errServer);
run();
httpBackend.flush();
}
catch(err)
{
console.log("catch");
fail(err);
}
finally
{
console.log("finally");
done();
}
我仍然认为可能有一种方法可以用承诺来测试它,但通过这种方式,我已经能够捕获并测试错误。