如何测试具有外部依赖项的 Webpack 包?

IT技术 reactjs mocha.js ruby-on-rails-5 jsdom webpacker
2021-04-30 06:18:20

我是 Webpacker 和 Rails 的新手。我最近开始使用 Webpacker 来捆绑 React 组件。由于应用程序的一部分仍然使用资产管道,因此一些依赖项仍然存储在 中vendor/assets/javascript,并且可以作为全局变量访问。Webpack bundle 将这些依赖项声明为外部依赖项,并且在为应用程序提供服务时,一切正常,因为 Rails 提供依赖项,然后由 bundle 获取。现在我想开始使用 jsdom 之类的东西来测试包。我正在使用与开发中配置相同的 mocha-webpack。

在这种情况下如何加载外部依赖项?如果我理解正确的话,bundle 构建得很好,但是当测试运行时,依赖项没有加载。

2个回答

考虑使用另一个webpack.config.js仅用于测试构建,例如创建一个不使用外部webpack.config.test.js,但将所有供应商文件捆绑为 npm 依赖项。

resolve.alias测试模式下使用了 webpack 的特性,externals开发/生产模式下使用特性

基本上,根据模式进行webpack.config.js检查process.env.NODE_ENV并返回不同的设置。

const path = require('path');

const isTest = process.env.NODE_ENV === 'test';

let resolve;
let externals = { jquery: 'jquery ' };
if (isTest) {
    externals = {};

    resolve = {
        alias: {
            // you may have to fiddle around with this path, from the point of view of where jquery is imported
            jquery: './tests/helpers/fakeJQuery.js',
        }
    };
}

module.exports = {
    // ...
    resolve,
    externals,
    // ...
};

可以在此处看到 vue.js 的一个示例:https ://stackoverflow.com/a/68569055/289203