2

我有一个不使用browserify工具的反应应用程序。这意味着该React变量是由在<head>.

// React variable is already available
var MyComponent = React.createClass({}); 

实现这个组件后,我想为它创建一个测试。我查看了Jest 文档并创建了组件测试。

/** @jsx React.DOM */
jest.dontMock('../compiled_jsx/components/my-component.js');
describe('MyComponent', function() {
it('The variables are being passed to component', function() {
  var React = require('react/addons');

  // In the `MyComponent` import I got the error below: 
  // ReferenceError: /compiled_jsx/components/my-component.js: React is not defined
  var myComponent = require('../compiled_jsx/components/my-component.js'); 
});

Jest 文档示例中,组件及其测试都使用该require函数来获取React变量。

有没有办法将React变量暴露到组件中?或者有必要使用 browserify 来创建这个测试?

4

1 回答 1

2

Jest 在 node.js 中运行,因此您需要使用 commonjs 模块。您不要将 browserify 与玩笑一起使用。如果您真的反对 commonjs 模块,则可以假设每个文件都包含在 iffe 中。

var React = typeof require === 'undefined' 
              ? window.React 
              : require('react/addons');

或者作为测试的第一行,尝试:

global.React = require('react/addons');

无论哪种方式,使用以下方式导出您的组件:

try { module.exports = Foo; } catch (e) { window.Foo = Foo };

就个人而言,如果您不使用 commonjs 模块,我认为玩笑并不实用。

于 2014-09-23T05:51:46.010 回答