使用茉莉花监视没有对象的功能

2022-08-30 01:52:40

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

我尝试使用窗口/文档作为对象,但即使调用了该函数,间谍也无法正常工作。我还尝试将其包装在假对象中,如下所示:

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

并测试

expect(fakeElement.fakeMethod).toHaveBeenCalled();

这也不起作用,因为间谍不起作用


答案 1

如果要定义函数:

function test() {};

然后,这等效于:

window.test = function() {}  /* (in the browser) */

所以应该工作。spyOn(window, 'test')

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

test = jasmine.createSpy();

如果这些都不起作用,则您的设置发生了其他事情。

我不认为你的技术有效,因为幕后发生了什么。原始的全局方法仍然指向相同的代码。间谍的作用是代理它,但只能在对象的上下文中。如果你能让你的测试代码通过fakeElement调用,它就会起作用,但这样你就可以放弃全局fns。fakeElement


答案 2

TypeScript 用户:

我知道OP询问了javascript,但是对于任何想要监视导入函数的TypeScript用户来说,这是你可以做的。

在测试文件中,从以下位置转换函数的导入:

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();