可以使用不同的URL调用$ httpbackend

时间:2016-09-14 05:24:28

标签: angularjs karma-jasmine code-cleanup httpbackend

我有一个调用返回数据的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'在任何测试中都不会被调用。我不知道如何进一步。

1 个答案:

答案 0 :(得分:0)

似乎你永远不会调用模拟异步操作所需的$httpBackend.flush(); ...另外,你也永远不会使用

afterEach(() => {
  $httpBackend.verifyNoOutstandingExpectation();
  $httpBackend.verifyNoOutstandingRequest();
});  

您可能需要在https://docs.angularjs.org/api/ngMock/service/ $ httpBackend

处拥有更多 in-deep 视图