Проверка угловых единиц spyOn(). And.callthrough не вызывает фактическую функцию

Я новичок в модульном тестировании с Жасмин в Angular.

В настоящее время я тестирую сервис, в котором есть функция loadSomething (id), и я добавил в него console.info.

МОЙ СЕРВИС:

function loadSomething(id)
{
    console.info('this is a test message');
    return (a promise from a POST request)
}

И это мой тестовый (spec) файл:

//verify that the load function exists
it('load snapshot',function(){

  expect(MyService.loadSomething(108)); //statement 1
  spyOn(MyService, 'loadSomething').and.callThrough(); //statement 2
});

Итак, я прочитал в Интернете, что метод сквозного вызова SpyOn вызывает функцию ACTUAL. Тем не менее, когда я запускаю свой тест с оператором ожидаемого (оператор 1), вызывается сообщение console.info (это прекрасно работает). С другой стороны, когда я закомментирую утверждение 1 и раскомментирую SpyOn (утверждение 2), я больше не получаю сообщение console.info.

Я ожидаю, что произойдет прямо противоположное. Я понял что-то не так здесь?

(остальная часть кода работает нормально, как файл спецификации, так и реальный сервис, я просто не понимаю эту конкретную вещь)

Заранее благодарю за помощь.

1 ответ

SpyOn поможет вам настроить, как функция должна реагировать на вызовы в ваших тестах. В основном это жасминовый способ создания издевательств.

В вашем случае вы определили, что должен делать тест при вызове сервисной функции, то есть callThrough. Проблема заключается в том, что вам также необходимо воздействовать на сервисную функцию (или на область действия, которая вызывает ваш сервисный метод), чтобы вызвать SpyOn, который вызовет ThThrough

it('load snapshot',function(){

  //setup
  spyOn(MyService, 'loadSomething').and.callThrough(); //statement 2

  //act

  //either call the scope function which uses the service 
  //$scope.yourServiceCallFunction();

  //or call the service function directly
  MyService.loadSomething(1); //this will callThrough

});

Вот простой тест, в котором мы будем высмеивать ответ SpyOn на строку

it('test loadSomething',function(){

  //setup
  spyOn(MyService, 'loadSomething').and.returnValue('Mocked');

  //act
  var val = MyService.loadSomething(1);

  //check
  expect(val).toEqual('Mocked');
});
Другие вопросы по тегам