Почему я получаю ошибку … неожиданный запрос: GET / internalapi / quotes

Я определил следующую услугу в своем угловом приложении:

services.factory('MyService', ['Restangular', function (Restangular) { return { events : { loading : true }, retrieveQuotes : function() { return Restangular.all('quotes').getList().then(function() { return { hello: 'World' }; }); } }; }]); 

и я пишу следующую спецификацию, чтобы проверить ее:

 describe("MyService", function () { beforeEach(module('MyApp')); beforeEach(module("restangular")); var $httpBackend, Restangular, ms; beforeEach(inject(function (_$httpBackend_, _Restangular_, MyService) { ms = MyService; $httpBackend = _$httpBackend_; Restangular = _Restangular_; })); it("retrieveQuotes should be defined", function () { expect(ms.retrieveQuotes).toBeDefined(); }); it("retrieveQuotes should return array of quotes", function () { $httpBackend.whenGET("internalapi/quotes").respond({ hello: 'World' }); ms.retrieveQuotes(); $httpBackend.flush(); }); }); 

Всякий раз, когда я запускаю тесты, первый тест проходит, но второй тест вызывает ошибку:

Error: Unexpected request: GET /internalapi/quotes

Что я делаю не так?

РЕДАКТИРОВАТЬ:

Оказалось, что я настроил Restangular так: RestangularProvider.setBaseUrl("/internalapi"); , Но я притворялся, что звонил во internalapi/quotes . Обратите внимание на отсутствие «/». Как только я добавил косую черту /internalapi/quotes все было хорошо 🙂

Вам нужно сказать $ httpBackend, чтобы ожидать запроса GET.

 describe("MyService", function () { beforeEach(module('MyApp')); beforeEach(module("restangular")); var Restangular, ms; beforeEach(inject(function (_Restangular_, MyService) { ms = MyService; Restangular = _Restangular_; })); it("retrieveQuotes should be defined", function () { expect(ms.retrieveQuotes).toBeDefined(); }); it("retrieveQuotes should return array of quotes", inject(function ($httpBackend) { $httpBackend.whenGET("internalapi/quotes").respond({ hello: 'World' }); //expect a get request to "internalapi/quotes" $httpBackend.expectGET("internalapi/quotes"); ms.retrieveQuotes(); $httpBackend.flush(); })); }); 

В качестве альтернативы вы можете поместить свой respond() в свой expectGET() . Я предпочитаю помещать свои whenGET() в beforeEach() таким образом, что мне не нужно определять ответ в каждом тесте.

  //expect a get request to "internalapi/quotes" $httpBackend.expectGET("internalapi/quotes").respond({ hello: 'World' }); ms.retrieveQuotes(); $httpBackend.flush(); 

У меня была такая же проблема, как и вы, ребята. Моим решением было добавить ‘/’ в начале URL-параметра .expectGET. Используя ваш пример:

 $httpBackend.expectGET("/internalapi/quotes").respond({ hello: 'world'}) 

Удачи

  • Эквивалент $ compile в Angular 2
  • Как перезагрузить текущий маршрут с помощью углового маршрутизатора 2
  • ПРЕДУПРЕЖДЕНИЕ: очистка небезопасного значения значения стиля
  • Создание и возrotation наблюдаемого из службы углового 2
  • Angularjs: Служба, которая обслуживает несколько URL-адресов ресурсов / источников данных?
  • Угловой - загруженный файл POST
  • Angular 4.3.3 HttpClient: как получить значение из заголовка ответа?
  • использование внешних JS-библиотек в моем проекте с угловым 2
  • Угловой: условный class с * ngClass
  • Когда использовать интерфейс и модель в TypeScript / Angular2
  • Angular 2 скачать PDF из API и отобразить его в представлении
  • Давайте будем гением компьютера.