To support JSX with Mocha, we used a Node.js “compiler”. This is a bit of JavaScript that gets run on every require. It was originally created to facilitate the use of CoffeeScript, but it’s since found other uses as the set of “compile to JS” languages has expanded.
To use this compiler, you pass it via the --compilers flag to mocha: mocha --compilers .:tests/compiler.js tests/*test.js
// tests/compiler.js
var fs = require('fs'),
ReactTools = require('react-tools'),
origJs = require.extensions['.js'];
require.extensions['.js'] = function(module, filename) {
// optimization: external code never needs compilation.
if (filename.indexOf('node_modules/') >= 0) {
return (origJs || require.extensions['.js'])(module, filename);
}
var content = fs.readFileSync(filename, 'utf8');
var compiled = ReactTools.transform(content, {harmony: true});
return module._compile(compiled, filename);
};