@stryker-mutator/karma-runner
Advanced tools
Comparing version 3.3.1 to 4.0.0-beta.0
@@ -6,2 +6,13 @@ # Change Log | ||
# [4.0.0-beta.0](https://github.io/stryker-mutator/stryker/compare/v3.3.1...v4.0.0-beta.0) (2020-07-10) | ||
### Bug Fixes | ||
* **karma-runner:** mocha filtering with `/` ([#2290](https://github.io/stryker-mutator/stryker/issues/2290)) ([3918633](https://github.io/stryker-mutator/stryker/commit/3918633b21ff37d2e950df2cc14b8557ee7eb6b3)) | ||
## [3.3.1](https://github.io/stryker-mutator/stryker/compare/v3.3.0...v3.3.1) (2020-07-04) | ||
@@ -8,0 +19,0 @@ |
{ | ||
"name": "@stryker-mutator/karma-runner", | ||
"version": "3.3.1", | ||
"version": "4.0.0-beta.0", | ||
"description": "A plugin to use the karma test runner in Stryker, the JavaScript mutation testing framework", | ||
@@ -9,4 +9,4 @@ "main": "src/index.js", | ||
"mocha": "npm run test:unit && npm run test:integration", | ||
"test:unit": "mocha \"test/helpers/**/*.js\" \"test/unit/**/*.js\"", | ||
"test:integration": "mocha --timeout 30000 --exit \"test/helpers/**/*.js\" \"test/integration/**/*.js\"", | ||
"test:unit": "mocha \"test/unit/**/*.js\"", | ||
"test:integration": "mocha --timeout 30000 --exit \"test/integration/**/*.js\"", | ||
"stryker": "node ../core/bin/stryker run" | ||
@@ -36,11 +36,8 @@ }, | ||
"devDependencies": { | ||
"@stryker-mutator/jasmine-framework": "^3.3.1", | ||
"@stryker-mutator/mocha-framework": "^3.3.1", | ||
"@stryker-mutator/test-helpers": "^3.3.1", | ||
"@stryker-mutator/util": "^3.3.1", | ||
"@stryker-mutator/test-helpers": "4.0.0-beta.0", | ||
"@types/express": "~4.17.0", | ||
"@types/node": "^14.0.1", | ||
"@types/semver": "~7.2.0", | ||
"@types/semver": "~7.3.1", | ||
"jasmine-core": "~3.5.0", | ||
"karma": "~5.0.1", | ||
"karma": "~5.1.0", | ||
"karma-chai": "^0.1.0", | ||
@@ -55,3 +52,4 @@ "karma-chrome-launcher": "~3.1.0", | ||
"dependencies": { | ||
"@stryker-mutator/api": "^3.3.1", | ||
"@stryker-mutator/api": "4.0.0-beta.0", | ||
"@stryker-mutator/util": "4.0.0-beta.0", | ||
"decamelize": "^4.0.0", | ||
@@ -73,3 +71,3 @@ "semver": "~6.3.0", | ||
}, | ||
"gitHead": "f7fb1e1eaa8df028f4add5f462a33f70ec4ea262" | ||
"gitHead": "6c7b6db975d681869b46a5c1bfb553d6bbabd841" | ||
} |
import { PluginKind } from '@stryker-mutator/api/plugin'; | ||
import * as strykerValidationSchema from '../schema/karma-runner-options.json'; | ||
export declare const strykerPlugins: import("@stryker-mutator/api/plugin").ClassPlugin<PluginKind.TestRunner, ["logger", "getLogger", "options"]>[]; | ||
export declare const strykerPlugins: import("@stryker-mutator/api/plugin").ClassPlugin<PluginKind.TestRunner2, ["logger", "getLogger", "options"]>[]; | ||
export { strykerValidationSchema }; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -8,3 +8,3 @@ "use strict"; | ||
const KarmaTestRunner_1 = require("./KarmaTestRunner"); | ||
exports.strykerPlugins = [plugin_1.declareClassPlugin(plugin_1.PluginKind.TestRunner, 'karma', KarmaTestRunner_1.default)]; | ||
exports.strykerPlugins = [plugin_1.declareClassPlugin(plugin_1.PluginKind.TestRunner2, 'karma', KarmaTestRunner_1.default)]; | ||
//# sourceMappingURL=index.js.map |
import { StrykerOptions } from '@stryker-mutator/api/core'; | ||
import { Logger, LoggerFactoryMethod } from '@stryker-mutator/api/logging'; | ||
import { RunResult, TestRunner } from '@stryker-mutator/api/test_runner'; | ||
import * as karma from 'karma'; | ||
import { TestRunner2, DryRunOptions, MutantRunOptions, DryRunResult, MutantRunResult } from '../../api/test_runner2'; | ||
export interface ConfigOptions extends karma.ConfigOptions { | ||
detached?: boolean; | ||
} | ||
export default class KarmaTestRunner implements TestRunner { | ||
export default class KarmaTestRunner implements TestRunner2 { | ||
private readonly log; | ||
private currentTestResults; | ||
private currentErrorMessages; | ||
private currentErrorMessage; | ||
private currentCoverageReport?; | ||
private currentRunStatus; | ||
private readonly testHooksMiddleware; | ||
private readonly starter; | ||
@@ -20,5 +18,5 @@ port: undefined | number; | ||
init(): Promise<void>; | ||
run({ testHooks }: { | ||
testHooks?: string; | ||
}): Promise<RunResult>; | ||
dryRun(options: DryRunOptions): Promise<DryRunResult>; | ||
mutantRun(options: MutantRunOptions): Promise<MutantRunResult>; | ||
private run; | ||
private loadSetup; | ||
@@ -30,8 +28,6 @@ private setGlobals; | ||
private listenToCoverage; | ||
private listenToRunComplete; | ||
private listenToError; | ||
private runServer; | ||
private collectRunResult; | ||
private determineRunState; | ||
} | ||
//# sourceMappingURL=KarmaTestRunner.d.ts.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const plugin_1 = require("@stryker-mutator/api/plugin"); | ||
const test_runner_1 = require("@stryker-mutator/api/test_runner"); | ||
const karma = require("karma"); | ||
const test_runner2_1 = require("../../api/test_runner2"); | ||
const strykerKarmaConf = require("./starters/stryker-karma.conf"); | ||
const ProjectStarter_1 = require("./starters/ProjectStarter"); | ||
const StrykerReporter_1 = require("./StrykerReporter"); | ||
const TestHooksMiddleware_1 = require("./TestHooksMiddleware"); | ||
const StrykerReporter_1 = require("./karma-plugins/StrykerReporter"); | ||
const TestHooksMiddleware_1 = require("./karma-plugins/TestHooksMiddleware"); | ||
class KarmaTestRunner { | ||
constructor(log, getLogger, options) { | ||
this.log = log; | ||
this.testHooksMiddleware = TestHooksMiddleware_1.default.instance; | ||
const setup = this.loadSetup(options); | ||
@@ -19,3 +18,2 @@ this.starter = new ProjectStarter_1.default(getLogger, setup); | ||
this.listenToServerStart(); | ||
this.listenToRunComplete(); | ||
this.listenToSpecComplete(); | ||
@@ -25,16 +23,19 @@ this.listenToCoverage(); | ||
} | ||
init() { | ||
async init() { | ||
return new Promise((res, rej) => { | ||
StrykerReporter_1.default.instance.once('browsers_ready', res); | ||
this.starter | ||
.start() | ||
.then(() => { | ||
/*noop*/ | ||
}) | ||
.catch(rej); | ||
StrykerReporter_1.default.instance.once('browsers_ready', () => res()); | ||
this.starter.start().catch(rej); | ||
}); | ||
} | ||
async run({ testHooks }) { | ||
this.testHooksMiddleware.currentTestHooks = testHooks || ''; | ||
if (this.currentRunStatus !== test_runner_1.RunStatus.Error) { | ||
dryRun(options) { | ||
TestHooksMiddleware_1.default.instance.configureCoverageAnalysis(options.coverageAnalysis); | ||
return this.run(); | ||
} | ||
async mutantRun(options) { | ||
TestHooksMiddleware_1.default.instance.configureActiveMutant(options); | ||
const dryRunResult = await this.run(); | ||
return test_runner2_1.toMutantRunResult(dryRunResult); | ||
} | ||
async run() { | ||
if (!this.currentErrorMessage) { | ||
// Only run when there was no compile error | ||
@@ -63,5 +64,4 @@ // An compile error can happen in case of angular-cli | ||
this.currentTestResults = []; | ||
this.currentErrorMessages = []; | ||
this.currentErrorMessage = undefined; | ||
this.currentCoverageReport = undefined; | ||
this.currentRunStatus = test_runner_1.RunStatus.Complete; | ||
} | ||
@@ -85,14 +85,8 @@ // Don't use dispose() to stop karma (using karma.stopper.stop) | ||
} | ||
listenToRunComplete() { | ||
StrykerReporter_1.default.instance.on('run_complete', (runStatus) => { | ||
this.currentRunStatus = runStatus; | ||
}); | ||
} | ||
listenToError() { | ||
StrykerReporter_1.default.instance.on('browser_error', (error) => { | ||
this.currentErrorMessages.push(error); | ||
this.currentErrorMessage = error; | ||
}); | ||
StrykerReporter_1.default.instance.on('compile_error', (errors) => { | ||
errors.forEach((error) => this.currentErrorMessages.push(error)); | ||
this.currentRunStatus = test_runner_1.RunStatus.Error; | ||
this.currentErrorMessage = errors.join(', '); | ||
}); | ||
@@ -109,21 +103,14 @@ } | ||
collectRunResult() { | ||
return { | ||
coverage: this.currentCoverageReport, | ||
errorMessages: this.currentErrorMessages, | ||
status: this.determineRunState(), | ||
tests: this.currentTestResults, | ||
}; | ||
} | ||
determineRunState() { | ||
// Karma will report an Error if no tests had executed. | ||
// This is not an "error" in Stryker terms | ||
if (this.currentRunStatus === test_runner_1.RunStatus.Error && !this.currentErrorMessages.length && !this.currentTestResults.length) { | ||
return test_runner_1.RunStatus.Complete; | ||
if (this.currentErrorMessage) { | ||
return { | ||
status: test_runner2_1.DryRunStatus.Error, | ||
errorMessage: this.currentErrorMessage, | ||
}; | ||
} | ||
else if (this.currentErrorMessages.length) { | ||
// Karma will return Complete when there are runtime errors | ||
return test_runner_1.RunStatus.Error; | ||
} | ||
else { | ||
return this.currentRunStatus; | ||
return { | ||
status: test_runner2_1.DryRunStatus.Complete, | ||
tests: this.currentTestResults, | ||
mutantCoverage: this.currentCoverageReport, | ||
}; | ||
} | ||
@@ -130,0 +117,0 @@ } |
import { LoggerFactoryMethod } from '@stryker-mutator/api/logging'; | ||
import { Config, ConfigOptions } from 'karma'; | ||
declare const _default: ((config: Config) => void) & { | ||
/** | ||
* Provide global settings for next configuration | ||
* This is the only way we can pass through any values between the `KarmaTestRunner` and the stryker-karma.conf file. | ||
* (not counting environment variables) | ||
*/ | ||
setGlobals(globals: { | ||
karmaConfig?: ConfigOptions; | ||
karmaConfigFile?: string; | ||
getLogger?: LoggerFactoryMethod; | ||
}): void; | ||
}; | ||
export = _default; | ||
declare function configureKarma(config: Config): void; | ||
declare namespace configureKarma { | ||
var setGlobals: (globals: { | ||
karmaConfig?: ConfigOptions | undefined; | ||
karmaConfigFile?: string | undefined; | ||
getLogger?: LoggerFactoryMethod | undefined; | ||
}) => void; | ||
} | ||
export = configureKarma; | ||
//# sourceMappingURL=stryker-karma.conf.d.ts.map |
"use strict"; | ||
const path = require("path"); | ||
const util_1 = require("@stryker-mutator/util"); | ||
const StrykerReporter_1 = require("../StrykerReporter"); | ||
const TestHooksMiddleware_1 = require("../TestHooksMiddleware"); | ||
const StrykerReporter_1 = require("../karma-plugins/StrykerReporter"); | ||
const TestHooksMiddleware_1 = require("../karma-plugins/TestHooksMiddleware"); | ||
const utils_1 = require("../utils"); | ||
@@ -54,2 +54,3 @@ function setDefaultOptions(config) { | ||
function setClientOptions(config) { | ||
var _a; | ||
// Disable clearContext because of issue #2049 (race condition in Karma) | ||
@@ -60,2 +61,13 @@ // Enabling clearContext (default true) will load "about:blank" in the iFrame after a test run. | ||
config.set({ client: { clearContext: false } }); | ||
// Disable randomized tests with using jasmine. | ||
// Stryker doesn't play nice with a random test order, since spec id's tent to move around | ||
if ((_a = config.frameworks) === null || _a === void 0 ? void 0 : _a.includes('jasmine')) { | ||
config.set({ | ||
client: { | ||
jasmine: { | ||
random: false, | ||
}, | ||
}, | ||
}); | ||
} | ||
} | ||
@@ -91,6 +103,17 @@ function setUserKarmaConfig(config) { | ||
config.files.unshift({ pattern: TestHooksMiddleware_1.TEST_HOOKS_FILE_NAME, included: true, watched: false, served: false, nocache: true }); // Add a custom hooks file to provide hooks | ||
const middleware = config.middleware || (config.middleware = []); | ||
const middleware = config.beforeMiddleware || (config.beforeMiddleware = []); | ||
middleware.unshift(TestHooksMiddleware_1.default.name); | ||
TestHooksMiddleware_1.default.instance.configureTestFramework(config.frameworks); | ||
addPlugin(config, { [`middleware:${TestHooksMiddleware_1.default.name}`]: ['value', TestHooksMiddleware_1.default.instance.handler] }); | ||
} | ||
function configureStrykerMutantCoverageAdapter(config) { | ||
config.files = config.files || []; | ||
config.files.unshift({ | ||
pattern: require.resolve('../karma-plugins/StrykerMutantCoverageAdapter'), | ||
included: true, | ||
watched: false, | ||
served: true, | ||
nocache: true, | ||
}); | ||
} | ||
function configureStrykerReporter(config) { | ||
@@ -108,3 +131,3 @@ addPlugin(config, { [`reporter:${StrykerReporter_1.default.name}`]: ['value', StrykerReporter_1.default.instance] }); | ||
}; | ||
module.exports = Object.assign((config) => { | ||
function configureKarma(config) { | ||
const log = globalSettings.getLogger(path.basename(__filename)); | ||
@@ -118,15 +141,16 @@ setDefaultOptions(config); | ||
configureTestHooksMiddleware(config); | ||
configureStrykerMutantCoverageAdapter(config); | ||
configureStrykerReporter(config); | ||
}, { | ||
/** | ||
* Provide global settings for next configuration | ||
* This is the only way we can pass through any values between the `KarmaTestRunner` and the stryker-karma.conf file. | ||
* (not counting environment variables) | ||
*/ | ||
setGlobals(globals) { | ||
globalSettings.karmaConfig = globals.karmaConfig; | ||
globalSettings.karmaConfigFile = globals.karmaConfigFile; | ||
globalSettings.getLogger = globals.getLogger || (() => util_1.noopLogger); | ||
}, | ||
}); | ||
} | ||
/** | ||
* Provide global settings for next configuration | ||
* This is the only way we can pass through any values between the `KarmaTestRunner` and the stryker-karma.conf file. | ||
* (not counting environment variables) | ||
*/ | ||
configureKarma.setGlobals = (globals) => { | ||
globalSettings.karmaConfig = globals.karmaConfig; | ||
globalSettings.karmaConfigFile = globals.karmaConfigFile; | ||
globalSettings.getLogger = globals.getLogger || (() => util_1.noopLogger); | ||
}; | ||
module.exports = configureKarma; | ||
//# sourceMappingURL=stryker-karma.conf.js.map |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
82826
10
789
6
1
+ Added@stryker-mutator/api@4.0.0-beta.0(transitive)
+ Added@stryker-mutator/util@4.0.0-beta.0(transitive)