使用茉莉来窥探一个没有对象的函数
我是茉莉花新手,刚刚开始使用它。 我有一个图书馆的js文件与许多function,这是没有任何对象(即全球)的关联。 我如何去探究这些function?
我尝试使用窗口/文档作为对象,但即使函数被调用间谍也不工作。 我也尝试把它包装在一个假物体中,如下所示:
var fakeElement = {}; fakeElement.fakeMethod = myFunctionName; spyOn(fakeElement, "fakeMethod");
和testing
expect(fakeElement.fakeMethod).toHaveBeenCalled();
这不工作,因为间谍没有工作
如果你正在定义你的function:
function test() {};
那么,这相当于:
window.test = function() {} /* (in the browser) */
所以spyOn(window, 'test')
应该工作。
如果不是的话,你也应该能够:
test = jasmine.createSpy();
如果这些都没有工作,其他事情正在进行与您的设置。
我不认为你的fakeElement
技术因为幕后操作而起作用。 原始的globalMethod仍指向相同的代码。 从事间谍活动的是代理它,但仅限于一个对象。 如果你能得到你的testing代码,通过伪造元素来调用它,那么你就可以放弃全球fns。
我有两种select(茉莉花2)
这个不太明确,因为看起来function实际上是假的。
test = createSpy().and.callFake(test);
第二个更详细,更明确,更“清洁”:
test = createSpy('testSpy', test).and.callThrough();
– > 茉莉花的源代码看第二个参数
TypeScript用户:
我知道OP询问了关于javascript的问题,但是对于想要窥探导入函数的任何TypeScript用户,以下是您可以执行的操作。
在testing文件中,将函数的导入转换为:
import {foo} from '../foo_functions'; x = foo(y);
对此:
import * as FooFunctions from '../foo_functions'; x = FooFunctions.foo(y);
然后你可以窥探FooFunctions.foo
🙂
spyOn(FooFunctions, 'foo').and.callFake(...); // ... expect(FooFunctions.foo).toHaveBeenCalled();
它必须是可能的,而没有定义窗口。 全局function。 尝试:
var x = function() {} spyX = spyOn(x, 'call') // // something, that calls x expect(spyX).toBeCalled()