2016-12-07 5 views
1

Мой тест жасмин за $ httpBackend не будет работать, если я не добавлял имя домена, т.е. http://localhost:9808/

Поскольку этот тест используется в нескольких различных средах я не могу использовать http://localhost:9808/

Без домена я получаю эту ошибку:

Uncaught Ошибка: Неожиданный запрос: GET http://localhost:9808/api/mymethod нет больше запрос не ожидал

describe('test my service', function() { 
     'use strict'; 

     var $httpBackend, 
      myService; 

     beforeEach(inject(function (_$injector_, _$httpBackend_) { 
      var $injector = _$injector_; 
      $httpBackend = _$httpBackend_; 

      myService = $injector.get('myService'); 

      // this works 
      //$httpBackend.whenGET('http://localhost:9808/api/mymethod').respond(200, mockData); 

      // this throws error 
      $httpBackend.whenGET('/api/mymethod').respond(200, mockData); 
     })); 

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

     it('check service exists and has methods', function() { 
      expect(myService).toBeDefined(); 
      expect(myService.somemethod).toBeDefined(); 

     $httpBackend.flush(); 
    }); 
}); 

Я даже попытался добавить эти строки в beforeEach

// это также бросает ошибка

$ httpBackend.when ('GET', «/api/mymethod').respond(200, mockData) ;

// даже добавление ожиданий по-прежнему вызывает ошибку в beforeOach $ httpBackend.expectGET ('/ api/mymethod');

Любые идеи или предложения о том, как заставить это работать без использования домена?

Вот сервис-код, который фактически делает запрос:

(function(app) { 

    'use strict'; 
    function MyService(apiService) { 
     var returnDataObject = []; 

     apiService.getAll().then(function(result) { 
      returnDataObject = result.data; 
     }); 

     this.myMethod = function() { 
      if(returnDataObject) { 
      return returnDataObject; 
      } 
      else { 
      return null; 
      } 
     }; 

    } 

    app.service('MyService', MyService); 
    MyService.$inject = ['APIService']; 

})(angular.module('app.mymodule')); 
+1

Каков код, который действительно делает запрос? –

ответ

0

Я думаю, вы могли бы использовать регулярное выражение, чтобы соответствовать URL

Вы можете сделать:

var method = 'GET'; 
var url = '/mymethod'; 
$httpBackend.when(method, new RegExp('\\' + url)).respond(200, mockData);