AngularJS Jasmine тестирует запрос на получение

У меня есть фабрика для выполнения запроса на получение, я хотел бы протестировать. К сожалению, тест на карму говорит мне, что в $httpBackend не определен ответ.

AngularJs 1.2.14, Жасмин 2.0, Карма 0.12.0

Вот мой модуль, который я хотел бы протестировать:

var appFactory = angular.module('appFactory', []);

appFactory.factory('boxListService', function($http){
    return{
        getList: function(){
            return $http.get('/boxlist').then(function(result){
                return result.data;
            });
        }
    };
});

Мой тест таков:

describe('Module-Test', function() {

    beforeEach(module('appFactory'));

     it('should call $http.get in getList', inject(function (boxListService, $httpBackend){
        $httpBackend.expectGET('/boxlist');
        boxListService.getList();
        $httpBackend.flush();
      }));
});

Сообщение:

Error: No response defined !
at $httpBackend (D:/nodeJS/host/test_app/src/public/js/libs/angular/angular-mock.js:1206:13)

person marcel    schedule 13.03.2014    source источник


Ответы (2)


Вы должны определить ожидаемый ответ, а также ожидаемый запрос. Он будет иметь вид:

$httpBackend.expectGET('/boxlist').respond(HTTP_STATUS_CODE, EXPECTED_RESPONSE);

HTTP_STATUS_CODE — целое число. EXPECTED_RESPONSE — это возвращаемое значение (часто это объектный литерал).

Вы можете определить только один из них.

Дополнительные сведения см. в документации http://docs.angularjs.org/api/ngMock/service/%24httpBackend.

person Pascal Le Merrer    schedule 13.03.2014
comment
Я просмотрел это примерно 5 раз, прежде чем понял, что ответ также нужно объявить в expectGET. У меня сложилось впечатление, что whenGET было единственным местом, где нужно было объявить ответ. Можно ли с уверенностью сказать, что нужно объявить ответ как на whenGET, так и на expectGET? - person binarygiant; 25.11.2014

На всякий случай это поможет и потому что это случилось со мной, хотя это не точный случай вопроса. У меня были эти две строки:

$httpBackend.whenGET(myService.serviceURL).respond(myMock);
$httpBackend.expectGET(myService.serviceURL);

С помощью when я хотел определить, что отвечать при вызове службы, а с помощью expect я хотел проверить, был ли вызван метод.

Это не работает (хотя иногда и работает, не знаю почему). Я думаю, каким-то образом expect переопределяет when, и поэтому я получил

Ошибка: ответ не определен!

Решение состояло в том, чтобы удалить предложение when и добавить respond() к expect.

$httpBackend.expectGET(myService.serviceURL).respond(myMock);

Я не знаю, почему фреймворк так себя ведет. Если кто-то знает, было бы неплохо, если бы вы объяснили это здесь, чтобы улучшить ответ.

person iberbeu    schedule 28.04.2016