Вызывают ли шпионы в Жасмине функцию, на которую они шпионят? - PullRequest
0 голосов
/ 31 марта 2019

Я хочу знать, как внутренне работает функция «spyOn». Я прочитал, что функция spyOn внутренне заменяет реализацию функции, за которой следят. Сохраняет ли он старый функционал?

В качестве примера предположим, что я хотел шпионить за объектом, который отправляет данные на сервер.

describe("A spy", function() {
  var object;
    spyOn(object, 'sendDataToServer');
    object.sendDataToServer('Some Message');
});

В этом случае сообщение все еще отправляется на сервер или шпион высмеивает его?

1 Ответ

1 голос
/ 09 апреля 2019

Сообщение не отправляется на сервер. То, как вы определили шпиона, будет заменять функцию sendDataToServer всякий раз, когда она вызывается в контексте вашего теста.

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

let mySpy = spyOn(object, 'sendDataToServer').and.callFake((message: string) => {
  console.log('I have been called with ' + message);
});
object.sendDataToServer('Some Message'); // -> will call the function defined above and log the message passed

Или, если вы хотите вызвать фактическую функцию:

let mySpy = spyOn(object, 'sendDataToServer').and.callThrough();
object.sendDataToServer('Some Message'); // -> will call the actual function on object
...