Угловой жасмин spyOn $ ресурс Неожиданный запрос

0

Я тестирую устройство на угловом контроллере, который вызывает сервис для получения данных 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 в поддельную службу методы, и не беспокойтесь о шпионаже.

Теги:
unit-testing
karma-jasmine

1 ответ

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()
  });
  • 0
    Это решит проблему для тестовых случаев, но при работе в браузере я никогда не получу правильные данные? Есть ли способ поместить второй .whenGET куда-нибудь, что будет оцениваться только при выполнении теста?
  • 0
    Вы можете поместить это в свой оператор beforeEach, где это обычно и должно быть. plnkr.co/edit/YimHnl2KztI7GET2MNWw?p=preview
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню