https://github.com/nick2bad4u/eslint-plugin-test-signal
ESLint plugin to flag weak tests: snapshot-only coverage, mock-call-only tests, unawaited assertions, no negative path, and empty async tests.
https://github.com/nick2bad4u/eslint-plugin-test-signal
eslint eslint-plugin eslintplugin lint signal test test-quality test-verify tests
Last synced: about 2 months ago
JSON representation
ESLint plugin to flag weak tests: snapshot-only coverage, mock-call-only tests, unawaited assertions, no negative path, and empty async tests.
- Host: GitHub
- URL: https://github.com/nick2bad4u/eslint-plugin-test-signal
- Owner: Nick2bad4u
- License: mit
- Created: 2026-05-17T05:30:46.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-05-17T18:59:40.000Z (about 2 months ago)
- Last Synced: 2026-05-17T19:38:06.277Z (about 2 months ago)
- Topics: eslint, eslint-plugin, eslintplugin, lint, signal, test, test-quality, test-verify, tests
- Language: TypeScript
- Homepage: https://nick2bad4u.github.io/eslint-plugin-test-signal/
- Size: 1.22 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: CODEOWNERS
- Security: SECURITY.md
- Support: SUPPORT.md
- Agents: AGENTS.md
Awesome Lists containing this project
README
# eslint-plugin-test-signal
[](https://github.com/Nick2bad4u/eslint-plugin-test-signal/blob/main/LICENSE) [](https://www.npmjs.com/package/eslint-plugin-test-signal) [](https://github.com/Nick2bad4u/eslint-plugin-test-signal/releases) [](https://github.com/Nick2bad4u/eslint-plugin-test-signal/stargazers) [](https://github.com/Nick2bad4u/eslint-plugin-test-signal/forks) [](https://github.com/Nick2bad4u/eslint-plugin-test-signal/issues) [](https://codecov.io/gh/Nick2bad4u/eslint-plugin-test-signal)
ESLint plugin for flagging weak tests before they become false confidence.
The first rule set focuses on:
- snapshot-only coverage;
- mock-call-only tests;
- unawaited Promise assertions;
- async tests without assertions;
- suites that never exercise a negative path.
## Table of contents
1. [Installation](#installation)
2. [Quick start](#quick-start)
3. [Presets](#presets)
4. [Rules](#rules)
5. [Compatibility](#compatibility)
## Installation
```sh
npm install --save-dev eslint-plugin-test-signal eslint typescript
```
## Quick start
```ts
import testSignal from "eslint-plugin-test-signal";
export default [testSignal.configs.recommended];
```
The bundled presets target common test file globs and register
`@typescript-eslint/parser` automatically.
## Presets
```ts
import testSignal from "eslint-plugin-test-signal";
export default [
testSignal.configs.minimal,
// testSignal.configs.recommended,
// testSignal.configs["recommended-type-checked"],
// testSignal.configs.strict,
// testSignal.configs.all,
// testSignal.configs.experimental,
];
```
| Preset | Intent |
| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------- |
| [`testSignal.configs.minimal`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/minimal) | Lowest-noise async correctness checks. |
| [`testSignal.configs.recommended`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) | Default weak-test signal coverage. |
| [`testSignal.configs["recommended-type-checked"]`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended-type-checked) | Compatibility preset for future typed rules. |
| [`testSignal.configs.strict`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) | Recommended plus negative-path coverage enforcement. |
| [`testSignal.configs.all`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) | Every stable rule. |
| [`testSignal.configs.experimental`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/experimental) | Stable rules plus future candidates. |
## Rules
- `Fix` legend:
- `fix` = autofixable
- `suggest` = suggestions available
- `-` = report only
- `Preset key` legend:
- [๐ข](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/minimal) - [`testSignal.configs.minimal`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/minimal)
- [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) - [`testSignal.configs.recommended`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended)
- [๐ ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended-type-checked) - [`testSignal.configs["recommended-type-checked"]`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended-type-checked)
- [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) - [`testSignal.configs.strict`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict)
- [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) - [`testSignal.configs.all`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all)
- [๐งช](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/experimental) - [`testSignal.configs.experimental`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/experimental)
| Rule | Fix | Preset key |
| --- | :-: | :-- |
| [`no-assertions-in-hooks`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-assertions-in-hooks) | - | [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-async-foreach-assertions`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-async-foreach-assertions) | - | [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-broad-object-key-count-assertions`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-broad-object-key-count-assertions) | - | [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-conditional-assertions`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-conditional-assertions) | - | [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-constant-assertions`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-constant-assertions) | - | [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-disabled-tests`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-disabled-tests) | - | [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-duplicate-assertions`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-duplicate-assertions) | - | [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-empty-async-tests`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-empty-async-tests) | - | [๐ข](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/minimal) [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-fixed-delay-tests`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-fixed-delay-tests) | - | [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-focused-tests`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-focused-tests) | - | [๐ข](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/minimal) [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-identical-expected-actual`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-identical-expected-actual) | - | [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-mock-call-only-tests`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-mock-call-only-tests) | - | [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-snapshot-only-tests`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-snapshot-only-tests) | - | [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-synthetic-promise-assertions`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-synthetic-promise-assertions) | - | [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-tautological-length-assertions`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-tautological-length-assertions) | - | [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-try-catch-assertions`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-try-catch-assertions) | - | [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-vacuous-numeric-assertions`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-vacuous-numeric-assertions) | - | [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-vacuous-string-assertions`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-vacuous-string-assertions) | - | [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-weak-asymmetric-assertions`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-weak-asymmetric-assertions) | - | [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-weak-existence-assertions`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-weak-existence-assertions) | - | [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`no-weak-truthy-assertions`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/no-weak-truthy-assertions) | - | [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`require-assertions`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/require-assertions) | - | [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`require-awaited-async-assertions`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/require-awaited-async-assertions) | - | [๐ข](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/minimal) [๐ก](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/recommended) [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`require-error-message-assertions`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/require-error-message-assertions) | - | [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
| [`require-negative-path`](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/require-negative-path) | - | [๐ด](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/strict) [๐ฃ](https://nick2bad4u.github.io/eslint-plugin-test-signal/docs/rules/presets/all) |
## Compatibility
- Supported ESLint versions: `9.x` and `10.x`
- Config system: Flat Config
- Node.js runtime: `>=22.0.0`