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

我尝试使用window/document作为对象,但是即使调用了该函数, spy 也无法正常工作。我还尝试将其包装在伪造的对象中,如下所示:

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

并测试
expect(fakeElement.fakeMethod).toHaveBeenCalled();

这也不起作用,因为 spy 不起作用

最佳答案

如果要定义功能:

function test() {};

然后,这等效于:
window.test = function() {}  /* (in the browser) */

因此,spyOn(window, 'test')应该可以工作。

如果不是这样,您还应该能够:
test = jasmine.createSpy();

如果这些都不起作用,则说明您的设置还有其他问题。

我不认为您的fakeElement技术起作用是因为幕后情况。原始的globalMethod仍然指向相同的代码。 spy 所做的是代理它,但仅在对象的上下文中。如果您可以让测试代码通过fakeElement进行调用,那么它将可以工作,但是您可以放弃全局fns。

10-08 04:19