2016-03-30 4 views
4

Я пытаюсь проверить, что моя программа обрабатывает сообщения об ошибках, получаемые из HTTP-запросов, но я не могу понять, как имитировать это с помощью $ httpBackend. Учитывая следующие:

$httpBackend.expectGET(path).respond(400, object); 

400 комплектов response.status, и объект устанавливает response.data, но как установить response.error? Данные, которые необходимо проверить, не находятся в поле данных.

Пример API Ответ:

{ 
    status: 400, 
    data: {}, 
    error: {} 
} 
+0

У меня такой же вопрос. –

+0

В объектах ответа ошибки 'error' нет. Отправьте свой код и уточните, что вы хотите проверить. –

+0

В объектах ответа httpBackend нет ошибок, но есть объекты, которые я получаю от используемого API. Это проблема. – TiggerToo

ответ

1

код ...

$httpBackend.expectGET(path).respond(400, object); 

говорит, когда код делает запрос на «пути» конечную точку, отвечает 400 код состояния с ответом 'object'

так, например, можно сказать, что ваш юнит-тест попадает в этот код в вашем приложении ...

$http.GET(path).then(function(response) { 
    // this code is hit with 2xx responses 
    vm.fred = 'hello'; 
}).catch(function(errorResponse) { 
    // this code is hit with any status code not starting with 2! e.g. 400 
    vm.fred='failed'; 
}); 

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

$rootScope.$digest(); 

это вызовет выполнение тогдашнего или улов блоков (в зависимости от необходимости).

вы можете сделать ожидания в своем модульном тесте, как обычно. Обратите внимание, что в вашем примере errorResponse будет объектом.

+1

Возможно, я не очень хорошо сформулировал свой вопрос, но это не отвечает на него. Проблема в том, что $ httpBackend поместит объект, который я передам ему в errorResponse.data, когда мне нужно, чтобы он был в errorResponse.error, чтобы высмеять рассматриваемый API. – TiggerToo

0

respond метод на $httpBackend цепь не предлагает способ настройки ответа. Его можно настроить с помощью перехватчиков $http. Самый простой способ указать ошибку для каждого ответа - использовать глобальный:

var responseError; 

beforeEach(module('app', ($httpProvider) => { 
    function responseErrorInterceptor($q) { 
    return { 
     responseError: (response) => { 
     response.error = responseError; 
     return $q.reject(response); 
     } 
    }; 
    } 

    $httpProvider.interceptors.push(responseErrorInterceptor); 
})); 

...  
responseError = { ... }; 
Смежные вопросы