我是 Jasmine 的新手,刚刚开始使用它。我有一个库 js 文件,其中包含许多与任何对象(即全局)无关的函数。我该如何监视这些功能?
我尝试使用窗口/文档作为对象,但即使调用了该函数,间谍也不起作用。我还尝试将其包装在一个假对象中,如下所示:
var fakeElement = {}; fakeElement.fakeMethod = myFunctionName; spyOn(fakeElement, "fakeMethod");
并测试
expect(fakeElement.fakeMethod).toHaveBeenCalled();
这也不起作用,因为间谍不起作用
如果您正在定义您的功能:
function test() {};
那么,这相当于:
window.test = function() {} /* (in the browser) */
所以spyOn(window, 'test')应该工作。
spyOn(window, 'test')
如果不是这样,您还应该能够:
test = jasmine.createSpy();
如果这些都不起作用,那么您的设置正在发生其他事情。
我认为您的fakeElement技术不起作用,因为幕后发生的事情。原来的 globalMethod 仍然指向相同的代码。间谍所做的是代理它,但仅限于对象的上下文中。如果您可以让您的测试代码通过 fakeElement 调用它会起作用,但是您将能够放弃全局 fns。
fakeElement