Skip to content

Instantly share code, notes, and snippets.

@daviferreira
Last active April 18, 2017 21:42
Show Gist options
  • Star 18 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daviferreira/1503ce0532abca270b86 to your computer and use it in GitHub Desktop.
Save daviferreira/1503ce0532abca270b86 to your computer and use it in GitHub Desktop.
Mocha compiler for es6 + react components with css require statements
'use strict';
var babel = require('babel-core');
var fs = require('fs');
// borrowed from https://github.com/babel/babel-jest/blob/master/index.js
require.extensions['.jsx'] = function (module, filename) {
var src = fs.readFileSync(filename, 'utf8');
// Allow the stage to be configured by an environment
// variable, but use Babel's default stage (2) if
// no environment variable is specified.
var stage = process.env.BABEL_JEST_STAGE || 2;
// Ignore all files within node_modules
if (filename.indexOf('node_modules') === -1 && babel.canCompile(filename)) {
var compiled = babel.transform(src, { filename: filename, stage: stage }).code;
return module._compile(compiled, filename);
}
return module;
};
require.extensions['.scss'] = function () {
return null;
};
require.extensions['.css'] = function () {
return null;
};
@daviferreira
Copy link
Author

mocha --reporter spec --compilers jsx:client/test/compiler.js ./client/components/**/*test.jsx

@xseignard
Copy link

Nice, instead of embedding the babel compiler you could do something like this

null-compiler.js

function noop() { return null; }

require.extensions['.css'] = noop;
require.extensions['.md'] = noop;

And run mocha like this:

mocha test/**/*.test.js* -R spec --compilers css:./test/misc/null-compiler,jsx:babel-core/register --recursive

@adriancooney
Copy link

Thanks for this!

@aweber1
Copy link

aweber1 commented Feb 2, 2016

Thanks for sharing this!

@ramirotw
Copy link

ramirotw commented Feb 2, 2016

👍 thanks!!

@hammeiam
Copy link

@xseignard this is a great solution! I changed your answer from css to less to suit my purposes and interestingly, I kept getting Invariant Violation errors until I switched the order of the compilers and listed jsx first. Any idea why that would be?

@AlastairTaft
Copy link

Brilliant! Thanks

@manuelro
Copy link

babel.canCompile is not a function on babel-core: ^6.24.1.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment