小编典典

使用 Jasmine 监视没有对象的函数

all

我是 Jasmine 的新手,刚刚开始使用它。我有一个库 js 文件,其中包含许多与任何对象(即全局)无关的函数。我该如何监视这些功能?

我尝试使用窗口/文档作为对象,但即使调用了该函数,间谍也不起作用。我还尝试将其包装在一个假对象中,如下所示:

var fakeElement = {};
fakeElement.fakeMethod = myFunctionName;
spyOn(fakeElement, "fakeMethod");

并测试

expect(fakeElement.fakeMethod).toHaveBeenCalled();

这也不起作用,因为间谍不起作用


阅读 110

收藏
2022-08-16

共1个答案

小编典典

如果您正在定义您的功能:

function test() {};

那么,这相当于:

window.test = function() {}  /* (in the browser) */

所以spyOn(window, 'test')应该工作。

如果不是这样,您还应该能够:

test = jasmine.createSpy();

如果这些都不起作用,那么您的设置正在发生其他事情。

我认为您的fakeElement技术不起作用,因为幕后发生的事情。原来的 globalMethod
仍然指向相同的代码。间谍所做的是代理它,但仅限于对象的上下文中。如果您可以让您的测试代码通过 fakeElement 调用它会起作用,但是您将能够放弃全局
fns。

2022-08-16