More on Testing With Mocha and Webpack

As I mentioned in that post, we’ve been using Mocha and Webpack. Since then the situation has improved a bit, so I thought it worth adding to the previous post with some additional information. In general, the approach I described in that post continues to serve us very well.

Mocha-Webpack Improvments

In my earlier post, I said:

Unlike mocha, mocha-webpack doesn’t (yet) support a --opts flag to specify the file location. A co-worker of mine will be submitting a pull request to rectify that.

The co-worker didn’t have time to get to the pull request, so I ran with it instead. It has since been merged, so now you can put your mocha-webpack.opts file wherever you’d like.

Shortly after writing that post, we discovered some issues with common test setup. We had a specHelper.js file that did some common setup of Chai plugins, like chai-as-promised and sinon-chai.

We were using the --require option to mocha-webpack to include the spec helper file, but that wasn’t working correctly because the spec helper was being required into a different environment than the tests.

I opened an issue on mocha-webpack. After some back and forth with the maintainer, he ultimately came up with a solution that works really well for us. We now use --include instead of --require for our spec helper.

With mocha-webpack 0.3, everything is working exactly as we’d like.

Thanks to Jan-André Zinser for a really useful project, and for helping me with these issues and PRs. In my opinion, mocha-webpack is a really good idea, and the project deserves more popularity than it has received so far. It’s still young, but works really well.

Style Loader

As I mentioned in the previous post:

Webpack’s style-loader also doesn’t work in the command-line environment. … There is an open pull request that makes it possible to use the style-loader in the command-line environment…

The pull request ended up getting rejected. The maintainer suggested using css/locals as mentioned in the last paragraph of the Webpack css-loader documentation:

Note: For prerendering with extract-text-webpack-plugin you should use css-loader/locals instead of style-loader!css-loader in the prerendering bundle. It doesn’t embed CSS but only exports the identifier mappings.

I’d read that documentation several times and never really noticed that line.

I experimented with this approach and found that it worked for us. Here’s our updated Webpack configuration for running Mocha tests:

Webpack Test Configuration

constconfig=require('./base')

config.module.loaders.push({

test:/\.scss$/,

loaders:[

'css/locals?modules&importLoaders=1'+

'&localIdentName=[path][local]__[hash:base64:5]',

'sass'

]

})

config.target='node'

module.exports=config

As before, we import our base Webpack configuration and then modify it a bit before re-exporting. Note that we’re not using the style-loader at all; instead we’re using css/locals.