When testing .js
files that have Webpack CSS imports like import './style.css'
, Mocha throws a syntax error (because it tries to import and parse the CSS file as JS). There is a solution for this that has already been posted on Stack Overflow, but it only addresses if you aren't already using a compiler with Mocha. I'm using Babel 5. I've tried the following, but it seems that Mocha doesn't support passing multiple compilers:
// npm test script
mocha ./src/**/*Test.js --compilers css:./scripts/mocha-webpack-compiler.js js:babel/register
// scripts/mocha-webpack-compiler.js
function noop() {
return null;
}
require.extensions['.css'] = noop;
Is there a way to have multiple Mocha compilers, or a better way to tell Mocha not to try to parse Webpack CSS imports?
EDIT:
I like the proposed solution by @Giles B below; it was exactly what I needed. However, since I am still on Babel 5 I needed a few tweaks as shown below:
mocha.opts
--require scripts/support/babelhook
--require scripts/support/mocha-webpack-compiler
scripts/babelhook.js
require('babel/register');
scripts/mocha-webpack-compiler.js
function noop() {
return null;
}
require.extensions['.css'] = noop;
mocha script
mocha ./src/**/*Test.js
This is working for me using babel
and babel-core
, both version 5.8.23
.
Based on @Giles' answer above, this is what I used to get working on Babel 6
package.json
tools/testHelper.js
This enables you to have your tests inside your src folder alongside your components.
I came across the same problem and just got it working, so in my mocha.opts file I added the following
require
calls:In
babelhook.js
I have one require statement to load babel:Then from the link you provided I setup
css-null-compiler.js
as follows:Hope that helps.