UNPKG

stryker-mocha-runner

Version:

A plugin to use the mocha test runner in Stryker, the JavaScript mutation testing framework

122 lines 5.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var path = require("path"); var test_runner_1 = require("stryker-api/test_runner"); var LibWrapper_1 = require("./LibWrapper"); var StrykerMochaReporter_1 = require("./StrykerMochaReporter"); var MochaRunnerOptions_1 = require("./MochaRunnerOptions"); var utils_1 = require("./utils"); var plugin_1 = require("stryker-api/plugin"); var DEFAULT_TEST_PATTERN = 'test/**/*.js'; var MochaTestRunner = /** @class */ (function () { function MochaTestRunner(log, allFileNames, options) { this.log = log; this.allFileNames = allFileNames; this.mochaRunnerOptions = options[MochaRunnerOptions_1.mochaOptionsKey]; this.additionalRequires(); StrykerMochaReporter_1.StrykerMochaReporter.log = log; } MochaTestRunner.prototype.init = function () { var globPatterns = this.mochaFileGlobPatterns(); var globPatternsAbsolute = globPatterns.map(function (glob) { return path.resolve(glob); }); this.testFileNames = LibWrapper_1.default.multimatch(this.allFileNames.slice(), globPatternsAbsolute); if (this.testFileNames.length) { this.log.debug("Using files: " + JSON.stringify(this.testFileNames, null, 2)); } else { this.log.debug("Tried " + JSON.stringify(globPatternsAbsolute, null, 2) + " on files: " + JSON.stringify(this.allFileNames, null, 2) + "."); throw new Error("[" + MochaTestRunner.name + "] No files discovered (tried pattern(s) " + JSON.stringify(globPatterns, null, 2) + "). Please specify the files (glob patterns) containing your tests in " + MochaRunnerOptions_1.mochaOptionsKey + ".files in your stryker.conf.js file."); } }; MochaTestRunner.prototype.mochaFileGlobPatterns = function () { if (typeof this.mochaRunnerOptions.files === 'string') { return [this.mochaRunnerOptions.files]; } else { return this.mochaRunnerOptions.files || [DEFAULT_TEST_PATTERN]; } }; MochaTestRunner.prototype.run = function (_a) { var _this = this; var testHooks = _a.testHooks; return new Promise(function (resolve, reject) { try { _this.purgeFiles(); var mocha_1 = new LibWrapper_1.default.Mocha({ reporter: StrykerMochaReporter_1.StrykerMochaReporter, bail: true }); _this.configure(mocha_1); _this.addTestHooks(mocha_1, testHooks); _this.addFiles(mocha_1); try { mocha_1.run(function () { var reporter = StrykerMochaReporter_1.StrykerMochaReporter.currentInstance; if (reporter) { var result = reporter.runResult; resolve(result); } else { var errorMsg = 'The StrykerMochaReporter was not instantiated properly. Could not retrieve the RunResult.'; _this.log.error(errorMsg); resolve({ errorMessages: [errorMsg], status: test_runner_1.RunStatus.Error, tests: [] }); } }); } catch (error) { resolve({ errorMessages: [error], status: test_runner_1.RunStatus.Error, tests: [] }); } } catch (error) { _this.log.error(error); reject(error); } }); }; MochaTestRunner.prototype.purgeFiles = function () { this.allFileNames.forEach(function (fileName) { return delete require.cache[fileName]; }); }; MochaTestRunner.prototype.addFiles = function (mocha) { this.testFileNames.forEach(function (fileName) { mocha.addFile(fileName); }); }; MochaTestRunner.prototype.addTestHooks = function (mocha, testHooks) { if (testHooks) { var suite_1 = mocha.suite; suite_1.emit('pre-require', global, '', mocha); suite_1.emit('require', utils_1.evalGlobal(testHooks), '', mocha); suite_1.emit('post-require', global, '', mocha); } }; MochaTestRunner.prototype.configure = function (mocha) { var options = this.mochaRunnerOptions; function setIfDefined(value, operation) { if (typeof value !== 'undefined') { operation.apply(mocha, [value]); } } if (options) { setIfDefined(options.asyncOnly, mocha.asyncOnly); setIfDefined(options.timeout, mocha.timeout); setIfDefined(options.ui, mocha.ui); setIfDefined(options.grep, mocha.grep); } }; MochaTestRunner.prototype.additionalRequires = function () { if (this.mochaRunnerOptions.require) { var modulesToRequire = this.mochaRunnerOptions.require .map(function (moduleName) { return moduleName.startsWith('.') ? path.resolve(moduleName) : moduleName; }); modulesToRequire.forEach(LibWrapper_1.default.require); } }; MochaTestRunner.inject = plugin_1.tokens(plugin_1.commonTokens.logger, plugin_1.commonTokens.sandboxFileNames, plugin_1.commonTokens.options); return MochaTestRunner; }()); exports.default = MochaTestRunner; //# sourceMappingURL=MochaTestRunner.js.map