【问题标题】:Why do I need `module.exports` in jest? How can I avoid it?为什么我需要 `module.exports` 开玩笑?我怎样才能避免它?
【发布时间】:2015-10-07 07:09:55
【问题描述】:

我在尝试使用 jest 框架测试我的 react js 代码时遇到了麻烦。

假设这是我的组件:

# coffee/global_widget.coffee
@GlobalWidget = React.createClass
  render: ->
    <div className='row'>
      <div className='col-md-12'>
        <TerminalWidget />
      </div>
    </div>

# coffee/terminal_widget.coffee
@TerminalWidget = React.createClass
  render: ->
    <div>Hey! This is the terminal!</div>

所以,我想使用jest 对其进行测试。

jest.dontMock '../coffee/global_widget'

describe 'GlobalWidget', ->
  global.React = require('react/addons')
  GlobalWidget = require('../coffee/global_widget')
  TestUtils = React.addons.TestUtils

  globalWidgetForTest = TestUtils.renderIntoDocument(<GlobalWidget />)
  # body of the test

我有麻烦:

npm test

> terminal-ui@0.0.2 test /home/alex/my_project
> jest

Using Jest CLI v0.4.5
 FAIL  __tests__/global_widget-test.coffee (0.276s)
● GlobalWidget › it encountered a declaration exception
  - ReferenceError: GlobalWidget is not defined

如果我将module.exports = @GlobalWidget 附加到coffee/global_widget.coffee,那么我得到TerminalWidget is not definedmodule.exports= 是什么?为什么我需要为代码中的每个组件都添加它们?

【问题讨论】:

    标签: javascript coffeescript reactjs jestjs


    【解决方案1】:

    看起来 jest 无法访问您的全局变量,因此您需要导出每个文件并在必要时要求它们。
    您需要使用 module.exports,因为您在 GlobalWidget = require('../coffee/global_widget') 这一行中使用了 requirejs 语法。这样做是为了隔离您的代码以防止拥有一堆全局可用的代码。这样,您只导入(使用require)和导出(使用module.exports = ...)您实际需要的代码。此外,在这种情况下,它允许诸如 jest 之类的进程访问其他可用的文件。

    如果您绝对不想使用requirejs(建议使用),您可以尝试将它们添加到您的全局变量中或玩笑config 以在您的测试套件之前使它们可用,尽管这可能会比仅导出模块更困难

    【讨论】:

    • 感谢您的回答!你能解释一下我应该在配置中准确编辑什么吗?
    猜你喜欢
    • 2013-07-24
    • 1970-01-01
    • 2022-12-08
    • 2019-07-09
    • 2017-11-23
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多