I run tests using Karma + Mocha + Chai + Webpack. I want to apply some Chai plugins to my tests. I use the Karma configuration below, which splits my tests into several packages.
I tried to use karma-chaito create a global instance chai, and then load the code that applied the plugins to the global instance. (See CHAI_CONFIG_PATHand plugins.config.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
});
}
Apply chai plugins:
import chaiImmutable from 'chai-immutable';
import chaiEnzyme from 'chai-enzyme';
import chaiSinon from 'chai-sinon';
chai.use(chaiImmutable);
chai.use(chaiEnzyme());
chai.use(chaiSinon);
Vanilla Web Client Configuration:
// 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-enzyme. config/chai/plugins.config.js , enzyme. , enzyme. enzyme . chai-enzyme wrap(myShallowWrapper) , el instanceof ShallowWrapper .
export default function wrap (el) {
if (el instanceof ShallowWrapper) {
return new ShallowTestWrapper(el)
}
...
}
, , . , , plugins.config.js , . , Chai ?