@stryker-mutator/jest-runner
Version:
A plugin to use the jest test runner and framework in Stryker, the JavaScript mutation testing framework
41 lines (32 loc) • 1.64 kB
text/typescript
import path from 'path';
import { StrykerOptions } from '@stryker-mutator/api/core';
import { commonTokens } from '@stryker-mutator/api/plugin';
import { requireResolve } from '@stryker-mutator/util';
import type * as jestModule from 'jest';
import { JestRunnerOptionsWithStrykerOptions } from '../jest-runner-options-with-stryker-options.js';
import { pluginTokens } from '../plugin-di.js';
export function determineResolveFromDirectory(options: StrykerOptions, resolve: (moduleId: string) => string): string {
return (options as JestRunnerOptionsWithStrykerOptions).jest.projectType === 'create-react-app'
? path.join(resolve('react-scripts/package.json'), '..')
: process.cwd();
}
determineResolveFromDirectory.inject = [commonTokens.options, pluginTokens.resolve] as const;
type RunCli = typeof jestModule.runCLI;
type GetVersion = typeof jestModule.getVersion;
/**
* Direct stubbing on jest is no longer possible since jest > 25
*/
export class JestWrapper {
private readonly jest: typeof jestModule;
public static readonly inject = [pluginTokens.resolveFromDirectory, pluginTokens.requireFromCwd] as const;
constructor(resolveFromDirectory: string, requireFrom: typeof requireResolve) {
// Use requireResolve, that way you can use this plugin from a different directory
this.jest = requireFrom('jest', resolveFromDirectory) as typeof jestModule;
}
public runCLI(...args: Parameters<typeof jestModule.runCLI>): ReturnType<RunCli> {
return this.jest.runCLI(...args);
}
public getVersion(...args: Parameters<GetVersion>): ReturnType<GetVersion> {
return this.jest.getVersion(...args);
}
}