Skip to content

maks-rafalko/eslint-plugin-proper-tests

Repository files navigation

eslint

eslint-plugin-proper-tests

ESLint plugin for writing proper tests

Installation

npm install -D eslint-plugin-proper-tests

Usage

Add proper-tests to the plugins section of your .eslintrc configuration file. You can omit the eslint-plugin- prefix:

module.exports = {
  "plugins": ["proper-tests"]
}

And then use the recommended shared configuration:

module.exports = {
  "extends": ["plugin:proper-tests/recommended"]
}

Or configure the rules one by one (not recommended):

module.exports = {
  "rules": {
    "proper-tests/no-useless-matcher-to-be-defined": "error"
  }
}

This plugin uses TypeScript to provide more accurate results. To enable this, you need to configure ESLint to work with TypeScript:

module.exports = {
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "project": true,
    "tsconfigRootDir": __dirname,
  }
}

Running rules only on test-related files

The rules provided by this plugin assume that the files they are checking are test-related. This means it's generally not suitable to include them in your top-level configuration as that applies to all files being linted which can include source files.

For .eslintrc configs you can use overrides to have ESLint apply additional rules to specific files:

module.exports = {
  "extends": ["eslint:recommended"],
  "overrides": [
    {
      "files": ["test/**"],
      "plugins": ["proper-tests"],
      "extends": ["plugin:proper-tests/recommended"],
      "rules": { "proper-tests/no-useless-matcher-to-be-defined": "off" }
    }
  ],
  "rules": {
    "indent": ["error", 2]
  }
}

Shareable configurations

Recommended

This plugin exports a recommended configuration that enforces good testing practices.

To enable this configuration with .eslintrc, use the extends property:

{
  "extends": ["plugin:proper-tests/recommended"]
}

Rules

💼 Configurations enabled in.
✅ Set in the recommended configuration.

Name                             Description 💼
no-long-arrays-in-test-each Disallow using long arrays with objects inside test.each() or it.each(). Force moving them out of the file.
no-mixed-expectation-groups Disallow mixing expectations for different variables between each other.
no-useless-matcher-to-be-defined Disallow using .toBeDefined() matcher when it is known that variable is always defined.
no-useless-matcher-to-be-null Disallow using .toBeNull() when TypeScript types conflict with it.

In order to use the rules powered by TypeScript type-checking, you must be using @typescript-eslint/parser & adjust your eslint config as outlined here.

Related Projects

eslint-plugin-jest

The main plugin to be installed when Jest is used.

https://github.com/jest-community/eslint-plugin-jest

eslint-plugin-jest-formatting

This project aims to provide formatting rules (auto-fixable where possible) to ensure consistency and readability in jest test suites.

https://github.com/dangreenisrael/eslint-plugin-jest-formatting