使用Jasmine来窥探一个没有对象的函数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我是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')应该工作。

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

test = jasmine.createSpy();

如果这些都不能正常工作,则其他事情正在进行。

我不认为你的fakeElement技术是在幕后发生的。原始的globalMethod仍然指向相同的代码。从事间谍活动的是代理它,但仅限于一个对象。如果你可以让你的测试代码通过伪元素进行调用,那么它就可以工作,但是你可以放弃全球fns。

用户回答回答于

有两种选择我用(茉莉花2)

这个不是很明确,因为它看起来功能实际上是假的。

test = createSpy().and.callFake(test); 

第二个更详细,更明确,更“清洁”:

test = createSpy('testSpy', test).and.callThrough();

- > jasmine源代码来查看第二个参数

扫码关注云+社区