2017-07-17 98 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' });