#jasmine #jasmine2.0
#jasmine #jasmine2.0
Вопрос:
Я хочу знать, как функция «spyOn» работает внутри. Я читал, что функция ‘spyOn’ внутренне заменяет реализацию отслеживаемой функции. Сохраняет ли она старую функциональность?
В качестве примера предположим, что я хотел шпионить за объектом, который отправляет данные на сервер.
describe("A spy", function() {
var object;
spyOn(object, 'sendDataToServer');
object.sendDataToServer('Some Message');
});
В этом случае сообщение все еще отправляется на сервер или шпион издевается над ним?
Комментарии:
1. не могли бы вы, пожалуйста, объяснить подробнее
Ответ №1:
Сообщение не отправляется на сервер. То, как вы определили шпион, он будет заменять 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