What is create-jest-runner?
The create-jest-runner package allows you to create custom Jest test runners. This can be useful for running tests in a specific way, adding custom logic before or after tests, or integrating with other tools.
What are create-jest-runner's main functionalities?
Creating a Custom Jest Runner
This feature allows you to create a custom Jest runner by using the `createJestRunner` function. You can specify the path to your custom runner logic.
const { createJestRunner } = require('create-jest-runner');
module.exports = createJestRunner(require.resolve('./my-runner'));
Custom Runner Logic
This code sample demonstrates how to implement custom runner logic. The custom runner can use Jest's `runCLI` function to execute tests and return the results.
const { runCLI } = require('jest');
module.exports = async ({ testPath }) => {
const result = await runCLI({ testPath }, [process.cwd()]);
return result;
};
Other packages similar to create-jest-runner
jest-runner-eslint
jest-runner-eslint is a Jest runner that allows you to run ESLint as part of your Jest tests. It is similar to create-jest-runner in that it provides a custom runner, but it is specifically designed for linting JavaScript code.
jest-runner-mocha
jest-runner-mocha is a Jest runner that allows you to run Mocha tests within a Jest environment. It provides similar functionality to create-jest-runner by enabling custom test execution, but it is tailored for integrating Mocha tests.
jest-runner-tsc
jest-runner-tsc is a Jest runner that compiles TypeScript files using the TypeScript compiler (tsc) as part of your Jest tests. It is similar to create-jest-runner in that it provides a custom runner, but it focuses on TypeScript compilation.
create-jest-runner
A highly opinionated way for creating Jest Runners
Install
yarn add create-jest-runner
Usage
create-jest-runner takes care of handling the appropriate parallelization and creating a worker farm for your runner.
You simply need two files:
- Entry file: Used by Jest as an entrypoint to your runner.
- Run file: Runs once per test file, and it encapsulates the logic of your runner
1) Create your entry file
const { createJestRunner } = require('create-jest-runner');
module.exports = createJestRunner(require.resolve('./run'));
2) Create your run file
module.exports = (options) => {
};
Run File API
This file should export a function that receives one parameter with the options
options: { testPath, config, globalConfig }
testPath
: Path of the file that is going to be testsconfig
: Jest Project config used by this fileglobalConfig
: Jest global config
You can return one of the following values:
Example of a runner
This runner "blade-runner" makes sure that these two emojis ⚔️ 🏃
are present in every file
const { createJestRunner } = require('create-jest-runner');
module.exports = createJestRunner(require.resolve('./run'));
const fs = require('fs');
const { pass, fail } = require('create-jest-runner');
module.exports = ({ testPath }) => {
const start = +new Date();
const contents = fs.readFileSync(testPath, 'utf8');
const end = +new Date();
if (contents.includes('⚔️🏃')) {
return pass({ start, end, test: { path: testPath } });
}
const errorMessage = 'Company policies require ⚔️ 🏃 in every file';
return fail({
start,
end,
test: { path: testPath, errorMessage, title: 'Check for ⚔️ 🏃' },
});
};
Add your runner to Jest config
Once you have your Jest runner you can add it to your Jest config.
In your package.json
{
"jest": {
"runner": "/path/to/my-runner"
}
}
Or in jest.config.js
module.exports = {
runner: '/path/to/my-runner',
}
Run Jest
yarn jest