我是Jasmine的新手,刚刚开始使用它。我有一个js库文件,里面有很多函数,这些函数与任何对象都没有关联(也就是说,它们是全局的)。我该如何监视这些函数?
我尝试使用window/document作为对象,但即使调用了该函数,间谍也无法工作。我还尝试将其包装在一个伪对象中,如下所示:
var fakeElement = {};
fakeElement.fakeMethod = myFunctionName;
spyOn(fakeElement, "fakeMethod");
并使用
expect(fakeElement.fakeMethod).toHaveBeenCalled();
这也不起作用,因为间谍没有工作。
发布于 2012-03-01 14:30:34
如果您正在定义函数:
function test() {};
然后,这相当于:
window.test = function() {} /* (in the browser) */
所以spyOn(window, 'test')
应该可以工作。
如果不是这样,您还应该能够:
test = jasmine.createSpy();
如果这些都不起作用,则说明您的设置中存在其他问题。
我不认为您的fakeElement
技术是有效的,因为幕后发生了什么。原始的globalMethod仍然指向相同的代码。侦察所做的是代理它,但仅在对象的上下文中。如果你能让你的测试代码通过fakeElement调用,它就能工作,但然后你就可以放弃全局fns了。
发布于 2015-04-28 23:03:23
我有两个选择(对于jasmine 2)
这个函数不是很明确,因为它看起来函数实际上是假的。
test = createSpy().and.callFake(test);
第二个更详细,更明确,更“干净”:
test = createSpy('testSpy', test).and.callThrough();
-> jasmine source code查看第二个参数
发布于 2017-12-28 04:25:42
一种非常简单的方法:
import * as myFunctionContainer from 'whatever-lib';
const fooSpy = spyOn(myFunctionContainer, 'myFunc');
https://stackoverflow.com/questions/9510148
复制相似问题