Guide
Plugins

Plugins

The plugins allow to change behavior of TSTyche.

This feature is available since TSTyche 3.0.

Usage

A plugin can be a package or a local module.

If you are publishing your plugin to npm, consider prefixing its name with tstyche-plugin-.

To specify a plugin, pass it with the --plugins command line option:

tstyche --plugins tstyche-plugin,./custom-plugin.js

Or use the plugins configuration option:

{
  "plugins": ["tstyche-plugin", "./custom-plugin.js"]
}

The Plugin

The plugin must export an object with the name property and implement one or more hooks:

/**
 * @type {import("tstyche/tstyche").Plugin}
 */
export default {
  name: "example-plugin",
 
  config(resolvedConfig) {
    return { ...resolvedConfig, testFileMatch: [] };
  },
 
  async select() {
    return await getTestFilesSomehow(this.resolvedConfig);
  },
};

Properties

name

  • Type: string

The name of this plugin.

Hooks

The hooks are called with a particular value which can be modified or replaced with a new value.

config()

  • Signature: (resolvedConfig: ResolvedConfig) => ResolvedConfig

Is called after configuration is resolved and allows to modify it.

/**
 * @type {import("tstyche/tstyche").Plugin}
 */
export default {
  name: "modify-config",
 
  config(resolvedConfig) {
    return {
      ...resolvedConfig,
      reporters: [new URL("./custom-reporter.js", import.meta.url).toString()],
      testFileMatch: [] /* disables look up */,
    };
  },
};

Use the --showConfig command line option to inspect the resolved configuration.

select()

  • Signature: (testFiles: Array<string>) => Array<string | URL>
  • Context: this.resolvedConfig: ResolvedConfig

Is called after test files are selected and allows to modify the list.

/**
 * @type {import("tstyche/tstyche").Plugin}
 */
export default {
  name: "filter-test-files",
 
  select(testFiles) {
    return testFiles.filter((testFile) => !testFile.endsWith("toBeNumber.test.ts"));
  },
};

Use the --listFiles command line option to inspect the list of selected files.

Examples

Providing List of Test Files

For example, you can disable test file look up and provide own list of test files:

/**
 * @type {import("tstyche/tstyche").Plugin}
 */
export default {
  name: "provide-test-files",
 
  config(resolvedConfig) {
    return { ...resolvedConfig, testFileMatch: [] /* disables look up */ };
  },
 
  async select() {
    // The resolved configuration is provided as a property of 'this' context
    return await getTestFilesSomehow(this.resolvedConfig.rootPath);
  },
};