AngularJS Jasmine Test — как пропустить запрос

У нас есть набор тестовых случаев, которые являются общими для многих различных форм. Некоторые формы могут запускать ленивый загрузчик, который предварительно загружает некоторые данные в свой пост-раздел директивы, поэтому запускает HTTP GET.

Таким образом, в общем тесте beforeEach я должен обработать его, иначе я получу Неожиданный запрос: GET /bla/requests/generateJson/something Больше запросов не ожидается

Я добавил $httpBackend.when("GET",//generateJson/(.+)/).respond(); перед областью видимости.$digest(); в тесте перед каждым. Теперь ошибка меняется на

Ошибка: невыполненные запросы: 1

Добавление $httpBackend.flush();

приводит к прохождению тестовых случаев при вызове GET, но все тестовые случаи, которые не запускают GET, завершаются с ошибкой

Ошибка: нет ожидающих запросов на сброс!

Как я могу справиться с этим? Я просто хочу, чтобы этот тест полностью игнорировал GET, независимо от того, присутствует он или нет. Могу ли я как-то определить, был ли запущен GET, и так реагировать с флешем?


person Petr Osipov    schedule 22.01.2016    source источник


Ответы (1)


Вы можете убедиться, что к макету $httpBackend не было обращений с помощью метода verifyNoOutstandingRequest(). Вы также можете проверить, что все ожидаемые вызовы серверной части были успешными, с помощью метода verifyNoOutstandingExpectation(). Таким образом, ваш код будет выглядеть примерно так:

describe('Test HTTP Service', function () {

    var $httpBackend;

    beforeEach(inject(function (_$httpBackend_) {
        $httpBackend = _$httpBackend_;
        $httpBackend.when('GET', '//generateJson/(.+)/').respond();
    }));

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

    it('calls the backend', function () {
        $httpBackend.GET('//generateJson/Petr/');
        $httpBackend.flush();
    });

    it('does not call the backend', function () {
        // Some action that does call $httpBackend
    });

});

Дополнительную информацию можно найти на странице $httpBackend документов. Кроме того, ознакомьтесь с этим обсуждением на GitHUb.

person Drewness    schedule 02.08.2017