阻止使用Jest调用本地导入的模块



我正在使用的代码:

//redux-reducer.js

import { combineReducers, loop, Effects } from 'redux-loop'
import { loginStart } from './actions'
import {
signUp,
login,
refreshAccessTokenStart,
replayAction,
postConfirmationToken,
postRequestForPasswordReset,
postNewPassword
} from './effects'
...
...
...

//redux-reducer-test.js

import combinedReducer from './reducers'
beforeEach(() => {
require.requireMock('effects') // something like this
})
...
...
...

问题是本地./effects模块调用react本机环境配置脚本。

我想用这样一种方式来模拟./effects模块,即./effects不会被执行

尚未奏效的事情:

  • 使用require.requireMock('effects')方法
  • 让它自动被嘲笑
  • 使用proxyquire:我认为proxyquire.noCallThru()会阻止./effects的运行。似乎proxyquire与Jest不兼容,而且Jest中应该(?)有这个功能

很想听听你的想法,了解更多关于Jest的信息!

它在文档中,这里:Jest docs

automock〔boolean〕

默认值:错误

默认情况下,此选项处于禁用状态。如果您要将Jest引入一个现有代码库但测试很少的大型组织,那么启用此选项将有助于逐步引入单元测试。模块可以使用jest.mock(moduleName).显式地自动模拟

还没有出现在文档中,这对我有效:

来自关于v15更改的Jest博客:

自动锁定现在在Jest中默认禁用。这是迄今为止对新用户来说最令人困惑的功能,在很多方面它都没有对小项目的感觉。我们在Facebook上引入了自动锁定当在现有的大型系统中采用单元测试时,对我们来说效果很好现有测试很少的代码库,但随着时间的推移,它感觉像是人花费更多的时间与模拟/未锁定的模块进行战斗已经带他们正常地写了一个测试。我们还注意到图书馆作者通常需要大量的基本模块以手动解除锁定。即使是Jest本身,我们也意识到大多数测试都手动禁用了自动锁定。我们仍然相信显式的自动锁定可能非常有价值。此更改简单地通过调用将隐式mock转换为显式mockjost.mmock(moduleName).

如果您仍然希望在默认情况下使用自动锁定,请启用自动锁定配置中的设置或手动调用测试或安装文件中的jest.enableAutomock()。

自动锁定现在可以使用我的package.json jest-config,如下所示:

"jest": {
"preset": "jest-react-native",
"testRegex": "\.test\.js$",
"setupFiles": [
"./setupJest.js"
],
"automock": true
},

似乎文档不完整,请关注博客!

最新更新