Мне нужно протестировать внутреннюю службу angular, реализованную в Angular 1.5.9 с помощью jasmine/karma.
Мне нужно написать тест, который проверяет, что ответ конкретной сервисной функции соответствует ожидаемому. Для этого я создаю фиктивный объект, создаю экземпляр службы, вызываю тестируемую функцию и использую expect().toBe()
для проверки возвращаемого значения.
К сожалению, служба выполняет многочисленные вызовы собственных функций, многие из которых выполняют дальнейшие вызовы с использованием службы $http
angular. Это делается для того, чтобы заполнить такие объекты, как пользовательские данные, локаль и другую специальную информацию о продукте. Достаточно сказать, что я не в состоянии преобразовать сервис в лучшую архитектуру; Я должен просто построить этот тест.
Поскольку вызовов $http
очень много, я намерен имитировать все данные, которые он запросит, используя серию строк, таких как эта:
var mockGetCartData = { "d": null, "message": null }; // at the top of the describe
$httpBackend.when('GET', /(.*)\/order\/api\/v1\/GetCart/).respond(200, mockGetCartData); // in the beforeEach
Когда я вызываю тестируемую функцию, я немедленно вызываю $httpBackend.flush()
, но, поскольку тест терпит неудачу, я обеспокоен тем, что мне нужно сделать, чтобы каждый (фальшивый) вызов $http
сбрасывался до того, как будет сделан следующий.
Нужно ли мне это делать или достаточно настроить все записи $httpBackend.when().respond()
, воздействовать на тестовую функцию, а затем вызвать одну flush()
? Если этого недостаточно, что мне делать?