Jest with webpack 提供插件

Posted

技术标签:

【中文标题】Jest with webpack 提供插件【英文标题】:Jest with webpack provide plugin 【发布时间】:2017-01-22 02:38:48 【问题描述】:

我正在使用 webpack-provide-plugin 来导入 react。

new webpack.ProvidePlugin(
        "React": "react",
),

// text.jsx

let text = (props) => (
  <div> 
    <p class="text">this.props.text</p>
  </div>
)

export default text 

//text.test.js

import React from 'react';
import  shallow  from 'enzyme';
import text from 'text';

it('Renders text', () => 
    const wrapper = shallow(<text/>);
    expect(wrapper.hasClass("text")).toEqual(true);
);

但是在用 jest 运行 react 组件测试时,我得到了错误

ReferenceError: React is not defined

当然,因为 react 没有显式导入。除了显式导入和放弃提供插件之外,还有其他方法可以解决这个问题吗?

【问题讨论】:

没有找到解决办法。但事后看来,我认为最好删除 webpack providePlugin 配置。因为导入应该更好地留给代码然后构建/捆绑配置。 同样的问题,我认为这很重要 模拟有帮助吗?我删除了 providePlugin 所以摆脱了这个问题 【参考方案1】:

您可以像这样为 Jest 创建一个设置文件:

//jest.setup.js
window.React = require('react');

并将其添加到 Jest 配置中: "setupFiles": [ "&lt;rootDir&gt;/jest.setup.js" ], http://facebook.github.io/jest/docs/configuration.html#setupfiles-array

【讨论】:

请注意,这也适用于DefinePlugin【参考方案2】:

在你使用 webpack 提供插件证明这个变量时删除这一行;

从“反应”导入反应;

【讨论】:

以上是关于Jest with webpack 提供插件的主要内容,如果未能解决你的问题,请参考以下文章

web pack

用Jest进行单元测试

升级玩笑后“[BABEL] .value 不是有效的插件属性”

Web Worker - Jest - 无法在模块外使用“import.meta”

使用 Jest 和 Webpack 别名进行测试

使用 ts-jest 和 webpack 允许 Jest 识别和解析模块别名需要啥?