Угловой жасмин spyOn $ ресурс Неожиданный запрос
Я тестирую модуль Angular, который вызывает сервис для получения данных JSON. Я использую Jasmine spyOn, чтобы шпионить за методом запроса моего сервиса следующим образом:
spyOn facilitiesService, 'query'
.and
.callFake (success, error) ->
deferred.promise.then success
deferred.promise.catch error
$promise: deferred.promise
Я определил фиктивный бэкэнд для запуска в браузере во время разработки, который перехватывает реальные вызовы REST и использует $resource(path/to.json).query()
вернуть поддельные данные. Всякий раз, когда у меня включен фиктивный бэкэнд, тестирование браузера работает нормально, но мои модульные тесты завершаются неудачно с неожиданным запросом scope.$digest()
, Как вызывается фиктивный бэкэнд, когда я слежу за методом?
Мне бы хотелось, чтобы эта конфигурация работала с указанным фиктивным бэкэндом, чтобы я мог просматривать файлы и запускать модульные тесты перед обновлением приложения в браузере.
ОБНОВИТЬ:
http://plnkr.co/edit/hVc2YNnwUDNv7IHODOMD?p=preview
Вот созданный мной поршень, который показывает поведение, которое я вижу. Почему метод $httpBackend whenGET даже вызывается?
Я видел другие примеры, где они создают фиктивный сервис, который содержит только пустые методы, за которыми следят, но в этом случае, какой смысл в callFake spyOn, если у вас уже есть фальшивый сервис, просто поместите логику callFake в фальшивый сервис методы, и не беспокойтесь о шпионаже.
1 ответ
В своем ложном ожидании вы отвечаете:
$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()
});