使用Jasmine监视没有对象的函数

2020/11/02 22:02 · javascript ·  · 0评论

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

我尝试使用window / document作为对象,但是即使调用了该函数,间谍也无法正常工作。我还尝试将其包装在伪造的对象中,如下所示:

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仍然指向相同的代码。间谍所做的是代理它,但仅在对象的上下文中。如果您可以让测试代码通过fakeElement进行调用,那么它将可以工作,但是您可以放弃全局fns。

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

我使用2种替代品(用于茉莉2)

该函数不是很明确,因为它似乎实际上是伪函​​数。

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

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

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

->茉莉花源代码看第二个参数

一个非常简单的方法:

import * as myFunctionContainer from 'whatever-lib';

const fooSpy = spyOn(myFunctionContainer, 'myFunc');
import * as saveAsFunctions from 'file-saver';
..........
....... 
let saveAs;
            beforeEach(() => {
                saveAs = jasmine.createSpy('saveAs');
            })
            it('should generate the excel on sample request details page', () => {
                spyOn(saveAsFunctions, 'saveAs').and.callFake(saveAs);
                expect(saveAsFunctions.saveAs).toHaveBeenCalled();
            })

这对我有用。

我的答案与@FlavorScape略有不同,因为我在导入的模块中有一个(默认导出)功能,我做了以下工作:

import * as functionToTest from 'whatever-lib';

const fooSpy = spyOn(functionToTest, 'default');
本文地址:http://javascript.askforanswer.com/shiyongjasminejianshimeiyouduixiangdehanshu.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!