我正在使用的代码:
//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
},
似乎文档不完整,请关注博客!