@stryker-mutator/core
Version:
The extendable JavaScript mutation testing framework
74 lines (49 loc) • 3.3 kB
Markdown
[](https://dashboard.stryker-mutator.io/reports/github.com/stryker-mutator/stryker-js/master?module=core)
[](https://github.com/stryker-mutator/stryker-js/actions?query=workflow%3ACI+branch%3Amaster)
[](https://www.npmjs.com/package/@stryker-mutator/core)
[](https://img.shields.io/node/v/@stryker-mutator/core.svg)
[](https://join.slack.com/t/stryker-mutator/shared_invite/enQtOTUyMTYyNTg1NDQ0LTU4ODNmZDlmN2I3MmEyMTVhYjZlYmJkOThlNTY3NTM1M2QxYmM5YTM3ODQxYmJjY2YyYzllM2RkMmM1NjNjZjM)

*Professor X: For someone who hates mutants... you certainly keep some strange company.*
*William Stryker: Oh, they serve their purpose... as long as they can be controlled.*
For an introduction to mutation testing and StrykerJS features, see [stryker-mutator.io](https://stryker-mutator.io/).
Please follow the [quickstart on the website](https://stryker-mutator.io/docs/stryker-js/getting-started/).
For small js projects, you can try the following command:
```
npm install --save-dev @stryker-mutator/core
npx stryker run
```
It will run stryker with default values:
* Uses `npm test` as your test command
* Searches for files to mutate in the `lib` and `src` directories
```sh
$ npx stryker <command> [options] [configFile]
```
See [usage on stryker-mutator.io](https://stryker-mutator.io/docs/stryker-js/usage)
See our website for the [list of currently supported mutators](https://stryker-mutator.io/docs/mutation-testing-elements/supported-mutators).
See [configuration on stryker-mutator.io](https://stryker-mutator.io/docs/stryker-js/configuration).
Stryker can also be used programmatically from nodejs. It exports 2 classes for you to use: `Stryker` and `StrykerCli`.
```ts
import { Stryker, StrykerCli } from '@stryker-mutator/core';
```
Both classes can be used to run Stryker. The main difference is that `Stryker` is a slightly more low-level approach, while `StrykerCli` is the straight up CLI api.
In this example you can see how to use both.
```ts
async function main() {
// Runs Stryker as if it was called directly from the cli. Not even returns a promise, it assumes to be allowed to call `process.exit`.
new StrykerCli(process.argv /* RAW argv array */ ).run();
// Runs Stryker, will not assume to be allowed to exit the process.
const stryker = new Stryker({ concurrency: 4 } /* Partial Stryker options object */ );
const mutantResults = await stryker.runMutationTest();
// mutantResults or rejected with an error.
}
```
Stryker is written in TypeScript, so it is recommended to use Typescript as well to get the best developer experience.