Socket
Socket
Sign inDemoInstall

@stryker-mutator/karma-runner

Package Overview
Dependencies
Maintainers
4
Versions
100
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@stryker-mutator/karma-runner - npm Package Compare versions

Comparing version 3.3.1 to 4.0.0-beta.0

src/karma-plugins/StrykerMutantCoverageAdapter.d.ts

11

CHANGELOG.md

@@ -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 @@

20

package.json
{
"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
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc