Проверка угловых единиц 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');
});