为什么我需要'模块.出口是在开玩笑吗?我怎样才能避免呢?



当我尝试使用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 defined。什么是module.exports=,为什么我需要把他们的每个组件在我的代码?

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

如果您绝对不想使用requirejs(建议使用),您可以尝试将它们添加到全局变量中,或者在测试套件之前修改jest配置以使它们可用,尽管这可能比仅导出模块

更困难。

相关内容

  • 没有找到相关文章

最新更新