Jasmine中的间谍实际上会调用他们正在监视的功能吗?

时间:2019-03-31 03:51:51

标签: jasmine jasmine2.0

我想知道“ spyOn”函数在内部如何工作。我读到'spyOn'函数在内部替换了所侦探函数的实现。它保留了旧功能吗?

作为一个示例,假设我想监视将数据发送到服务器的对象。

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

在这种情况下,消息是否仍然发送到服务器还是间谍对其进行了模拟?

1 个答案:

答案 0 :(得分: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