Почему я получаю ошибку … неожиданный запрос: 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(); }); });
Всякий раз, когда я запускаю тесты, первый тест проходит, но второй тест вызывает ошибку:
- Как обслуживать изображения в Angular2?
- В Angular, как вы определяете активный маршрут?
- Как группировать данные в Angular 2?
- Динамически установить значение ui-sref Angularjs
- Угловой 2 CLI огромный пакет поставщиков: как улучшить размер для prod?
Error: Unexpected request: GET /internalapi/quotes
Что я делаю не так?
РЕДАКТИРОВАТЬ:
Оказалось, что я настроил Restangular
так: RestangularProvider.setBaseUrl("/internalapi");
, Но я притворялся, что звонил во internalapi/quotes
. Обратите внимание на отсутствие «/». Как только я добавил косую черту /internalapi/quotes
все было хорошо 🙂
- Angular2 SEO - Как сделать угловое приложение с возможностью сканирования 2
- Как импортировать угловой материал в проект?
- Как сделать простой asynchronous запрос JSONP в Angular 2?
- Каким образом можно использовать угловые2 HTTP-запросы с защитой Django CSRF?
- Angular2 Tutorial (Tour of Heroes): Не удается найти модуль 'angular2-in-memory-web-api'
- Как получить доступ / обновить $ rootScope извне Угловой
- Угловой 2 OpaqueToken против Углового 4 InjectionToken
- Использует ли Angular2 веб-компоненты?
Вам нужно сказать $ 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'})
Удачи