Skip to content
Branch: master
Find file History
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
..
Failed to load latest commit information.
.vscode
src
test
testResources
typings
.npmignore
.npmrc
CHANGELOG.md
LICENSE
README.md
package.json
run-angular.d.ts
tsconfig.json
tsconfig.src.json
tsconfig.test.json

README.md

Build Status NPM Node version Gitter

Stryker Karma Runner

A plugin to use the karma test runner (or @angular/cli's ng test) in Stryker, the JavaScript mutation testing framework

Install

Install @stryker-mutator/karma-runner locally within your project folder, like so:

npm i --save-dev @stryker-mutator/karma-runner

Bring your own test runner

The @stryker-mutator/karma-runner is a plugin for stryker to enable karma as a test runner. However, it does not come packaged with it's own version of karma, instead it uses your very own karma version. It can also work with @angular/cli, see Configuring

Note: karma v2.0.3 has a known issue which makes it impossible to use it with Stryker. please upgrade to 2.0.4 or higher.

Configuring

You can configure the @stryker-mutator/karma-runner using the stryker.conf.js config file.

// Stryker.conf.js
module.exports = function (config) {
    config.set({
        // ...
        testRunner: 'karma',
        // ...
        karma: {
            projectType: 'custom', // or 'angular-cli'
            configFile: 'path/to/karma.conf.js' // default `undefined`
            config: { // default `undefined`
                browsers: ['ChromeHeadless'] // override config settings
            }
        }
    });
}

karma.projectType ["custom" | "angular-cli"]

Default: "custom"

Specify which kind of project you're using. This determines which command is used to start karma

  • "custom": configure @stryker-mutator/karma-runner to use karma start.
  • "angular-cli": configure @stryker-mutator/karma-runner to use ng test (see configuring for angular-cli).

karma.configFile [string]

Default: undefined

Specify a 'karma.conf.js' file to be loaded. Options specified directly in your stryker.conf.js file using karma.config will overrule options in your karma.conf.js file.

karma.config [any]

Default: undefined

Specify karma configuration options directly. Options specified here will overrule any options in your karma.conf.js file.

karma.ngConfig.testArguments [object]

Default: undefined

Add ng test arguments. For example, specify an alternative project with:

karma: {
    projectType: 'angular-cli',
    ngConfig: {
        testArguments: {
            project: 'my-lib'
        }
    }
}

This will run ng test with --project argument: ng test --project=my-lib.

Non overridable options

The browser's life cycle is determined by @stryker-mutator/karma-runner. I.e. these settings cannot be overridden:

{
  browserNoActivityTimeout: 1000000,
  autoWatch: false,
  singleRun: false,
  detached: false
}

The coverage plugin will also be removed (not needed for mutation testing).

Configure angular cli

Note: this requires v6.1.0-rc0 or higher of the @angular/cli

This is an example for a configuration of stryker using the angular cli:

// stryker.conf.js
exports = function(config){
    config.set({
        // ...
        karma: {
            projectType: 'angular-cli',
            karma: {
                configFile: 'src/karma.conf.js'
            },
            ngConfig: {
                // Override ng arguments here
                testArguments: {
                    project: 'my-lib'
                }
            }
        }
        // ...
    });
}

Debugging

As Stryker runs karma in its own process, its logging output will be consumed by Stryker.

To see all logging from karma, set the log level to trace in stryker.conf.js.

// stryker.conf.js
exports = function(config){
    config.set({
        // ...
        logLevel: 'trace'
        // ...
    });
}
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.