我有一个调用返回数据的REST URL的服务。
我的示例代码是
$http('POST', '/mockUrl/resource/'+resourceValue).then(...);
我的服务工作正常并返回数据。我的问题是如何在业力中测试这个。现在我有一个不同的resourceValue来测试被调用的mockUrl。在进入stackoverflow之前,在每次测试中我都使用预期的URL定义了$ httpBackend。
例如:
it('testing for status 200', function(){
$httpBackend.when('POST', '/mockUrl/resource/'+1234)
.respond(function (method, url, data, headers) {
return [200, data1];
});
MyService.serviceMethod(1234).then(function(){
//test the returned data
});
});
it('testing for status 201', function(){
$httpBackend.when('POST', '/mockUrl/resource/'+4567)
.respond(function (method, url, data, headers) {
return [201, data2];
});
MyService.serviceMethod(1234).then(function(){
//test the returned data
});
});
我被告知我不应该以上述方式写我的业力测试。但我不确定如何避免这种情况。
我试过了
$httpBackend.when('POST',url)
.respond(function (method, url, data, headers) {
return data[option];
});
但是这个'url'在任何测试中都不会被调用。我不知道如何进一步。
答案 0 :(得分:0)
似乎你永远不会调用模拟异步操作所需的$httpBackend.flush();
...另外,你也永远不会使用
afterEach(() => {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
您可能需要在https://docs.angularjs.org/api/ngMock/service/ $ httpBackend
处拥有更多 in-deep 视图