Я тестирую устройство на угловом контроллере, который вызывает сервис для получения данных json. Я использую Jasmine spyOn для отслеживания моего метода запросов на обслуживание следующим образом:
spyOn facilitiesService, 'query'
.and
.callFake (success, error) ->
deferred.promise.then success
deferred.promise.catch error
$promise: deferred.promise
Я определил $resource(path/to.json).query()
для запуска в браузере во время разработки, которая перехватывает реальные вызовы REST и использует $resource(path/to.json).query()
для возврата поддельных данных. Всякий раз, когда я включаю макетную бэкэнд, проверка браузера работает нормально, но мои модульные тесты терпят неудачу с неожиданным запросом, когда я занимаюсь scope.$digest()
. Как называется ложный бэкэнд, когда я слежу за методом?
Я хотел бы, чтобы эта конфигурация работала с макетным файлом, поэтому я могу просматривать файлы и запускать тесты модулей перед обновлением приложения в браузере.
ОБНОВИТЬ:
http://plnkr.co/edit/hVc2YNnwUDNv7IHODOMD?p=preview
Вот плункер, который я создал, который показывает поведение, которое я вижу. Почему метод $ httpBackend whenGET даже называется?
Я видел другие примеры, когда они создают mock-сервис, который содержит только пустые методы, но в этом случае, какова точка spyOn callFake, если у вас уже есть поддельный сервис, просто поместите логику callFake в поддельную службу методы, и не беспокойтесь о шпионаже.
В своем макетном ожидании вы отвечаете:
$resource('bagels.json2').query()
но что вещь снова триггер http запрос. Опция состоит в том, чтобы добавить еще одно ожидание:
$httpBackend.whenGET('bagels.json2').respond(function() {return []});
http://plnkr.co/edit/dkwl51kdMk6dADWs10bZ?p=preview
После комментария ниже. Вот решение, в котором вы должны положить ожидание внутри вашего тестового примера.
http://plnkr.co/edit/YimHnl2KztI7GET2MNWw?p=preview
Кроме того, у вас было (что вызывало вызов bagels.json2):
$httpBackend.whenGET('bagels.json').respond($resource('bagels.json2').query());
но вы должны иметь:
$httpBackend.whenGET('bagels.json').respond(function() {
$resource('bagels.json2').query()
});