Last active
August 27, 2019 10:21
-
-
Save mvgijssel/d3b121ad50e34c09a124 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* This plugin makes sure karma doesn't run any specs when there's a | |
* compilation error in a module by including a module even if the module has errors. | |
* | |
* Webpack's normal behaviour is to not include modules which have errors, | |
* which causes Karma to run all the tests without the failed spec. | |
* | |
* Some links to where this magic actually happens in Webpack: | |
* | |
* The module will be removed from the dependency: | |
* https://github.com/webpack/webpack/blob/v1.12.14/lib/Compilation.js#L646-L649 | |
* | |
* and dependencies without a module won't be included in the module map: | |
* https://github.com/webpack/webpack/blob/v1.12.14/lib/ContextModule.js#L87-L89 | |
* | |
* Setting the module._source to a javascript error is copied from: | |
* https://github.com/webpack/webpack/blob/v1.12.14/lib/NormalModule.js#L127 | |
*/ | |
var WebpackKarmaWarningsPlugin = function() {}; | |
var RawSource = require("webpack-core/lib/RawSource"); | |
WebpackKarmaWarningsPlugin.prototype.apply = function(compiler) { | |
compiler.plugin("compilation", function(compilation) { | |
compilation.plugin("failed-module", function(module) { | |
var moduleErrorMessage = module.error.error.toString() | |
module._source = new RawSource(`throw new Error(${JSON.stringify(moduleErrorMessage)});`); | |
module.error = null; | |
}); | |
}); | |
}; | |
module.exports = WebpackKarmaWarningsPlugin; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
for those looking for a webpack 4 approach in typescript - https://gist.github.com/jonesmac/9ef456153c714db56be0ec24b61c6fbb
I found I had to use the
compilation.warnings.length
to test if a relevant error occurred. I tried thefailedModule
hook but with no success.