2

我正在使用的代码:

// 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模块调用反应原生环境配置脚本。

我想以一种不会被执行./effects的方式来模拟模块。./effects

尚未奏效的事情:

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

有兴趣听听您的想法并了解有关 Jest 的更多信息!

4

2 回答 2

0

尚未在文档中,这对我有用:

来自关于 v15 更改的 Jest 博客

现在在 Jest 中默认禁用自动模拟。对于新用户来说,这是迄今为止最令人困惑的功能,并且在许多方面它对小型项目没有意义。我们在 Facebook 引入了 automocking,当在现有测试很少的大型现有代码库中采用单元测试时,它对我们非常有用,但随着时间的推移,人们感觉与模拟/非模拟模块打架的时间比他们花的时间要多正常写一个测试。我们还注意到库作者通常需要大量的基本模块,这些模块总是必须手动取消模拟。即使对于 Jest 本身,我们也意识到大多数测试都手动禁用了自动模拟。我们仍然相信显式自动模拟可能非常有价值。此更改只是通过调用 jest 将隐式模拟转换为显式模拟。

如果您仍想默认使用自动模拟,请在您的配置中启用自动模拟设置,或在您的测试或设置文件中手动调用 jest.enableAutomock()。

Automocking 现在适用于我的 package.json jest 配置,如下所示:

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

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

于 2017-02-09T04:21:21.173 回答
0

它在文档中,在这里:Jest Docs

automock [布尔值]

默认值:假

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

于 2017-02-09T10:31:27.687 回答