我是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。