使用Jest和react-bootstrap

时间:2015-11-18 12:53:22

标签: reactjs jestjs react-bootstrap

我正在尝试用Jest测试一些React组件。

我可以成功测试一个普通的JS文件和b)用CJSX(Coffeescript和JSX)编写的React组件。使用Jest的预处理器将CJSX文件处理成JS需要一些配置 - 但这似乎有效。至少我可以测试用CJSX编写的简单React组件。我不认为这个问题特定于编译CJSX文件。

但是:当我引入react-bootstrap时会出现问题。这是必要的,因为我想测试的所有组件都使用react-bootstrap。

当我取消反应bootstrap并且当我离开Jest以自动模拟它时,这同样发生。无论哪种方式,它都必须解析其测试运行器中的文件 - 这就是出现问题的时候。

这是特定的错误消息:

语法错误: 路径/元件/ scripts.cjsx: /node_modules/react-bootstrap/lib/index.js: /node_modules/react-bootstrap/lib/utils/bootstrapUtils.js:/node_modules/react-tools/src/vendor/core/warning.js:意外的令牌......

scripts.cjsx是包含我要测试的组件的文件 - 以及我需要'react-bootstrap'的文件

完整的堆栈跟踪是:

 at Object.exports.runInContext (vm.js:43:16)
        at JSDOMEnvironment.runSourceText (node_modules/jest-cli/src/environments/JSDOMEnvironment.js:40:10)
        at Object.runContentWithLocalBindings (node_modules/jest-cli/src/lib/utils.js:378:17)
        at Loader._execModule (node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:234:11)
        at Loader.requireModule (node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:845:14)
        at Loader.requireModuleOrMock (node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:875:19)
        at Object.<anonymous> (node_modules/react-bootstrap/lib/utils/bootstrapUtils.js:19:16)
        at Object.runContentWithLocalBindings (node_modules/jest-cli/src/lib/utils.js:397:17)
        at Loader._execModule (node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:234:11)
        at Loader.requireModule (node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:845:14)

2 个答案:

答案 0 :(得分:1)

我从jest-cli修改了JSDOMEnvironment.js以打印出正在加载的模块路径。在bootstrapUtil.js中执行require(&#39; warning&#39;)时(和我的代码的其他部分一样),这就是我所看到的:

_MyLayers[2]

在这里你可以看到&#34; ...&#34;是来自。这是从已弃用的反应工具中获取的,这些反应工具正在通过重新设置来降低。这应该从警告包中获取。我正在寻找一种解决方案,让开玩笑寻找那个包。

对不起,我已经回答了#34;,我想发表评论,但我还没有声名鹊起。

答案 1 :(得分:0)

这是因为需要过时的react-tools软件包 - 我最近收到了一条非常相似的错误消息,并将其从node_modules完全删除

这是我看到的错误:

  

SyntaxError:意外的令牌......       在eval(原生)       在JSDOMEnvironment.runSourceText