2015-10-09 2 views
1

У меня есть несколько запросов, которые запускаются в module.run:Global BeforeEach для насмешливого запроса HTTP с мокко и Угловое

angular.module('demo').run(function($http) { 
    $http.get('/some/thing'); 
    $http.get('/some/other/thing'); 
}); 

И когда я использую $rootScope.$apply в моих тестах, чтобы разрешить фиктивные обещания, которые я получаю unexpected request errors для '/some/thing' и '/some/other/thing' ,

Один из способов исправить это установить $httpBackend в beforeeach:

$httpBackend.when('GET', mockData.API_URL + '/some/thing').respond(200, {}); 
$httpBackend.when('GET', mockData.API_URL + '/some/other/thing').respond(200, {}); 

Это будет работать, но это означает, что я должен поставить его в beforeeach каждого тестового файла, где я использую $rootScope.$apply.

Как это сделать $httpBackend configs global для каждого тестового файла?
Или есть лучшее решение этой проблемы?

ответ

2

Из Mocha website, на "Root-Level Крючки":

Вы также можете выбрать любой файл и добавить "корневые" -уровень крючки. Например, добавить beforeEach() вне всех блоков describe(). Это вызовет обратный вызов beforeEach() для запуска до любого тестового примера, независимо от файла, в котором он живет (это связано с тем, что Mocha имеет скрытый блок описания() , называемый «корневым пакетом»).

beforeEach(function() { 
    console.log('before every test in every file'); 
}); 
1

Если вам действительно нужно в все Проведены тестовые VinceOPS ответ лучше. Что бы я сделал, если вам это не нужно в каждый тест, но только много переводит вызовы $ httpBackend в отдельную функцию и помещает их в общий файл js. Затем вы просто вызываете эту функцию из beforeEach при необходимости.

Для более сложных конфигураций я часто создаю свои собственные функции-обертки для describe(), it() или функции, в которой вы определяете тест, чтобы предотвратить дублирование кода (слишком много).

Смежные вопросы