首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Jasmine监视没有对象的函数

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

Stack Overflow用户
提问于 2012-03-01 11:17:37
回答 7查看 128.6K关注 0票数 173

我是Jasmine的新手,刚刚开始使用它。我有一个js库文件,里面有很多函数,这些函数与任何对象都没有关联(也就是说,它们是全局的)。我该如何监视这些函数?

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

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

并使用

expect(fakeElement.fakeMethod).toHaveBeenCalled();

这也不起作用,因为间谍没有工作。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-03-01 14:30:34

如果您正在定义函数:

function test() {};

然后,这相当于:

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

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

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

test = jasmine.createSpy();

如果这些都不起作用,则说明您的设置中存在其他问题。

我不认为您的fakeElement技术是有效的,因为幕后发生了什么。原始的globalMethod仍然指向相同的代码。侦察所做的是代理它,但仅在对象的上下文中。如果你能让你的测试代码通过fakeElement调用,它就能工作,但然后你就可以放弃全局fns了。

票数 164
EN

Stack Overflow用户

发布于 2015-04-28 23:03:23

我有两个选择(对于jasmine 2)

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

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

第二个更详细,更明确,更“干净”:

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

-> jasmine source code查看第二个参数

票数 48
EN

Stack Overflow用户

发布于 2017-12-28 04:25:42

一种非常简单的方法:

import * as myFunctionContainer from 'whatever-lib';

const fooSpy = spyOn(myFunctionContainer, 'myFunc');
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9510148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档