【发布时间】:2014-09-20 22:52:56
【问题描述】:
我正在为 React 应用程序编写测试,该应用程序使用 Fluxxor 来提供事件调度程序。要做到这一点,需要告诉 Jest 不要模拟一些内部使用的模块,这些模块由 Node 本身提供。
这意味着我不能只将它们添加到 unmockedModulePathPatterns 配置键中,而是必须使用如下代码:
[ 'util', 'events' ].forEach(function (module) {
jest.setMock(module, require.requireActual(module));
});
但是,我找不到任何有用的地方来放置它。我有一个setupEnvScriptFile,它设置了一些我在几乎所有测试中都使用的全局变量,但是jest 对象在那种情况下似乎不可用,所以我不能只在那里设置模拟.
作为权宜之计,我将上面的代码封装在一个函数中,我在任何 describe 块测试 Fluxxor 商店的开头调用该函数,但它远非理想。
【问题讨论】:
-
为什么你不能使用
unmockedModulePathPatterns? -
老实说,我并不确切地知道 为什么 它对我不起作用,但我在将核心 Node 模块添加到
unmockedModulePathPatterns方面所做的任何尝试都没有当我尝试使用以下模式时效果:util/usr/lib/node/util/usr/lib/node在任何情况下,util模块都会被嘲笑。 -
哦,难道
util本身可能没有被模拟,而是它加载了其他被模拟的模块? -
不,
util本身肯定会被嘲笑,因为当我使用require.requireActual时,我会得到预期的util对象,如果我不这样做,那么我会得到一个 Jest 模拟。
标签: unit-testing reactjs reactjs-flux jestjs