Подтвердить что ты не робот

Mocking $httpBackend - как обращаться с "Неожиданным запросом, больше запросов не требуется"?

У меня есть тест Жасмин, который закодирован следующим образом:

  it ("should send correct message to server to get data, and correctly set up scope when receiving it", function(){
    $httpBackend.when('GET', 'https://localhost:44300/api/projectconfiguration/12').respond(fakedDtoBase);
    $routeParams.projectId=fakeId; // user asks for editing project
    scope.$apply(function(){
        var controller=controllerToTest(); // so controller gets data when it is created
    });
    expect(scope.projectData).toEqual(fakedDtoBase);
});

и это вроде работает, но я получаю ошибку:

Error: Unexpected request: GET views/core/main/main.html
No more request expected
    at $httpBackend (C:/SVN/src/ClientApp/client/bower_components/angular-mocks/angular-mocks.js:1207:9)
    at sendReq (C:/SVN/src/ClientApp/client/bower_components/angular/angular.js:7800:9)
    at $http.serverRequest (C:/SVN/src/ClientApp/client/bower_components/angular/angular.js:7534:16)
    (more stack trace)....

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

4b9b3361

Ответ 1

Тестовый тест завершился неудачно, потому что был сделан запрос, который вы не указали.

Попробуйте добавить:

$httpBackend.when('GET', 'views/core/main/main.html').respond(fakedMainResponse);

Конечно, вы также должны определить fakedMainResponse.

Обратите внимание также на документацию (раздел "Запросы на ожидании" и "Определение бэкэнда" ), в котором говорится:

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

Второй параметр $httpBackend.when на самом деле a RegExp. Поэтому, если вы предоставите RegExp, который будет соответствовать всем другим запросам, он должен работать.

Ответ 2

Для тех, кто использует httpBackend для подделки http-вызовов в тестах EndToEnd или просто издевательства над всеми HTTP-вызовами для приложения, необходимо добавить следующий код в разделе конфигурации приложения (измените регулярное выражение в соответствии с вашим расположением шаблона):

$httpBackend.whenGET(/^\/templates\//).passThrough();

Ссылка: https://docs.angularjs.org/api/ngMockE2E/service/ $httpBackend

Протестировано с угловыми 1,4 для исправления аналогичной проблемы при интегрировании ui-router