Угловой жасмин 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()
  });
Другие вопросы по тегам