2017-07-17 99 views
0

我有一个宁静的API的AngularJS服务:

angular 
    .module('app', [ 
    ]) 

    .service('api', ['$http', '$q', function APIService($http, $q) { 
    this.get = function (dataProperty, params) { 
     return $http({ 
      method: 'get', 
      url: 'https://some.api/rest/', 
      params: angular.extend({ 
      default_params... 
      }, params) 
     }) 
     .then(
      function (result) { 
      if (result.data.status === 'ok') { 
       return result.data[dataProperty]; 
      } else { 
       return $q.reject(angular.extend(new Error(result.data.message), { result: result.data })); 
      } 
      }, 
      function (reason) { 
      return $q.reject(angular.extend(new Error('AJAX request to the API failed'), { reason: reason.data })); 
      }); 
    }; 
    }]); 

我试图测试这个api.get下列要求:

describe('api', function() { 
    var 
    $httpBackend, 
    service; 

    beforeEach(module('app')); 

    beforeEach(inject(function (_$httpBackend_, _api_) { 
    $httpBackend = _$httpBackend_; 
    service = _api_; 
    })); 

    afterEach(function() { 
    $httpBackend.verifyNoOutstandingExpectation(); 
    $httpBackend.verifyNoOutstandingRequest(); 
    }); 

    it('', function() { 
    $httpBackend 
     .when('get', 'https://some.api/rest/') 
     .respond({ 
     data: { 
      status: 'ok' 
     } 
     }); 
    service.get('status', {}); 
    $httpBackend.flush(); 
    $httpBackend 
     .expect('get', 'https://some.api/rest/'); 
    }); 
}); 

Error: AJAX request to the API failed in bower_components/angular-mocks/angular-mocks.js (line 279) 

我要对正确设置测试:

但我每次得到错误回调?我相信.when.response用于伪造实际的$ http调用,但我无法获得成功回调触发。

+0

你有data.stat和data.status - 应该是相同的 –

+0

也有是在代码中使用递延毫无意义 - 它可以简化 –

+0

?是。 ,他们应该是两个数据。状态。在我的代码中是正确的,当我简化为SO时,我刚才介绍了这个错字。 – Dave

回答

0

的两个问题是.when不是在寻找正确的URL(因为得到PARAMS被扔在我需要使它成为一个正则表达式:

.when('GET', /https:\/\/api\.flickr\.com\/services\/rest\/.*/) 

然后,.respond并不需要用被填充数据对象,它对于你:

.respond({ stat: 'ok' });