使用Jest

时间:2017-02-09 02:25:06

标签: javascript ecmascript-6 jestjs proxyquire

Code I' m with with with:

// 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的更多信息!

2 个答案:

答案 0 :(得分:0)

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

来自Jest blog about v15 changes

  

现在,Jest中默认禁用自动锁定。到目前为止   对于新用户来说最令人困惑的功能,并且在很多方面它都没有   小项目的意义。我们在Facebook和它上面引入了自动插件   当在大型现有设备中采用单元测试时,这对我们很有用   代码库很少有现有的测试,但随着时间的推移,感觉就像人   花费更多时间与模拟/未模拟模块进行战斗   已经让他们正常地写了一个测试。我们也注意到了这个库   作者经常需要大量的基本模块   要手动取消锁定。即使对于Jest本身我们也意识到了   大多数测试都手动禁用了automocking。我们仍然相信   明确的自动锁定可能非常有价值。这种变化   只需通过调用来交换显式模拟的隐式模拟   jest.mock(MODULENAME)。

     

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

Automocking现在可以使用我的package.json jest配置,如下所示:

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

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

答案 1 :(得分:0)

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

  

automock [boolean]

     

默认值:false

     

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