gpt4 book ai didi

webpack - 如何在 Karma 中跨 bundle 应用 Chai 插件?

转载 作者:行者123 更新时间:2023-12-01 23:03:00 25 4
gpt4 key购买 nike

我正在使用 Karma + Mocha + Chai + Webpack 运行测试。我想在我的测试中应用多个 Chai 插件。我正在使用下面的 Karma 配置,它将我的测试分成多个包。

我尝试使用 karma-chai 来创建全局 chai 实例,然后加载将插件应用到全局实例的代码。 (参见CHAI_CONFIG_PATHplugins.config.js):

// karma.config.babel.js
import WEBPACK_CONFIG from '../webpack/webpack.config.test';

const TESTS_PATH = 'src/**/*.test.js';
const CHAI_CONFIG_PATH = 'config/chai/*.js';

export default function(config) {
config.set({
autoWatch: false,
singleRun: !autoWatch,
browsers: ['PhantomJS'],
basePath: '../..',
frameworks: ['mocha', 'chai'],
files: [
require.resolve('babel-polyfill'),
CHAI_CONFIG_PATH
TESTS_PATH
],
preprocessors: {
[require.resolve('babel-polyfill')]: ['webpack'],
[CHAI_CONFIG_PATH]: ['webpack'],
[TESTS_PATH]: ['webpack', 'sourcemap']
},
webpack: WEBPACK_CONFIG,
webpackMiddleware: {
noInfo: true
},
reporters: ['mocha'],
logLevel: config.LOG_INFO
});
}

应用 chai 插件:

// config/chai/plugins.config.js
import chaiImmutable from 'chai-immutable';
import chaiEnzyme from 'chai-enzyme';
import chaiSinon from 'chai-sinon';

chai.use(chaiImmutable);
chai.use(chaiEnzyme());
chai.use(chaiSinon);

普通 Webpack 配置:

// webpack.config.tests.js
export default {
module: {
rules: [
BABEL_LOADER,
CSS_LOADER,
CSS_LOADER_GLOBALS,
JSON_LOADER,
MEDIA_FILE_LOADER,
MEDIA_URL_LOADER
]
},
plugins: [
DEFINE_PLUGIN,
EXTRACT_TEXT_PLUGIN
],
devtool: 'inline-source-map'
};

这一直有效,直到我添加了chai-enzymeconfig/chai/plugins.config.js 在它自己的包中运行,它加载enzyme。我的测试在另一个包中运行,它再次加载enzyme。这两种 enzyme 并不相同。 chai-enzyme 在每个断言上运行 wrap(myShallowWrapper),但 el instanceof ShallowWrapper 为 false。

// chai-enzyme/src/wrap.js
export default function wrap (el) {
if (el instanceof ShallowWrapper) {
return new ShallowTestWrapper(el)
}
...
}

我想将 bundle 分开,以便更轻松地开发测试。我发现的唯一修复方法是在每个测试文件的顶部导入 plugins.config.js ,但这似乎很棘手。是否有一个配置可以让我将 Chai 插件应用到每个包?

最佳答案

我也遇到了类似的问题。我没有找到完美的解决方案,但至少找到了适合我的情况的解决方法:

我围绕期望导入构建了自己的包装器,无论如何都需要将其包含在任何测试用例中。这样我就可以在一个中心位置配置我所有使用的 chai 插件:

// my-expect.ts:
import {expect as _expect} from 'chai';
import * as chai from 'chai';

chai.use(require('chai-things'));
chai.use(require('chai-string'));

export const expect = _expect;

在我现在的测试中,我只需将以前的 import {expect} from 'chai' 替换为 import {expect} from './my-expect' 即可使用所有我在那里包含的插件:

// my_spec.ts
import {expect} from './my-expect';

it('should use chai-things', () => {
expect([5, 7, 9]).to.all.be.above(4);
});

关于webpack - 如何在 Karma 中跨 bundle 应用 Chai 插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42729765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com