eslint-plugin-testing-library
Advanced tools
Comparing version
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.detectTestingLibraryUtils = void 0; | ||
exports.detectTestingLibraryUtils = detectTestingLibraryUtils; | ||
const utils_1 = require("@typescript-eslint/utils"); | ||
@@ -537,2 +537,1 @@ const node_utils_1 = require("../node-utils"); | ||
} | ||
exports.detectTestingLibraryUtils = detectTestingLibraryUtils; |
@@ -17,3 +17,28 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.findImportSpecifier = exports.isEmptyFunction = exports.getStatementCallExpression = exports.hasImportMatch = exports.getInnermostReturningFunction = exports.hasClosestExpectResolvesRejects = exports.getAssertNodeInfo = exports.getImportModuleName = exports.getFunctionName = exports.getReferenceNode = exports.getDeepestIdentifierNode = exports.getPropertyIdentifierNode = exports.getFunctionReturnStatementNode = exports.getInnermostFunctionScope = exports.getVariableReferences = exports.isPromiseHandled = exports.isPromisesArrayResolved = exports.isPromiseAllSettled = exports.isPromiseAll = exports.isPromiseIdentifier = exports.hasChainedThen = exports.hasThenProperty = exports.findClosestCallNode = exports.findClosestFunctionExpressionNode = exports.findClosestVariableDeclaratorNode = exports.findClosestCallExpressionNode = void 0; | ||
exports.findClosestCallExpressionNode = findClosestCallExpressionNode; | ||
exports.findClosestVariableDeclaratorNode = findClosestVariableDeclaratorNode; | ||
exports.findClosestFunctionExpressionNode = findClosestFunctionExpressionNode; | ||
exports.findClosestCallNode = findClosestCallNode; | ||
exports.hasThenProperty = hasThenProperty; | ||
exports.hasChainedThen = hasChainedThen; | ||
exports.isPromiseIdentifier = isPromiseIdentifier; | ||
exports.isPromiseAll = isPromiseAll; | ||
exports.isPromiseAllSettled = isPromiseAllSettled; | ||
exports.isPromisesArrayResolved = isPromisesArrayResolved; | ||
exports.isPromiseHandled = isPromiseHandled; | ||
exports.getVariableReferences = getVariableReferences; | ||
exports.getInnermostFunctionScope = getInnermostFunctionScope; | ||
exports.getFunctionReturnStatementNode = getFunctionReturnStatementNode; | ||
exports.getPropertyIdentifierNode = getPropertyIdentifierNode; | ||
exports.getDeepestIdentifierNode = getDeepestIdentifierNode; | ||
exports.getReferenceNode = getReferenceNode; | ||
exports.getFunctionName = getFunctionName; | ||
exports.getImportModuleName = getImportModuleName; | ||
exports.getAssertNodeInfo = getAssertNodeInfo; | ||
exports.hasClosestExpectResolvesRejects = hasClosestExpectResolvesRejects; | ||
exports.getInnermostReturningFunction = getInnermostReturningFunction; | ||
exports.hasImportMatch = hasImportMatch; | ||
exports.getStatementCallExpression = getStatementCallExpression; | ||
exports.isEmptyFunction = isEmptyFunction; | ||
exports.findImportSpecifier = findImportSpecifier; | ||
const scope_manager_1 = require("@typescript-eslint/scope-manager"); | ||
@@ -64,3 +89,2 @@ const utils_1 = require("@typescript-eslint/utils"); | ||
} | ||
exports.findClosestCallExpressionNode = findClosestCallExpressionNode; | ||
function findClosestVariableDeclaratorNode(node) { | ||
@@ -75,3 +99,2 @@ if (!node) { | ||
} | ||
exports.findClosestVariableDeclaratorNode = findClosestVariableDeclaratorNode; | ||
function findClosestFunctionExpressionNode(node) { | ||
@@ -88,3 +111,2 @@ if (!node) { | ||
} | ||
exports.findClosestFunctionExpressionNode = findClosestFunctionExpressionNode; | ||
function findClosestCallNode(node, name) { | ||
@@ -103,3 +125,2 @@ if (!node.parent) { | ||
} | ||
exports.findClosestCallNode = findClosestCallNode; | ||
function hasThenProperty(node) { | ||
@@ -110,3 +131,2 @@ return ((0, is_node_of_type_1.isMemberExpression)(node) && | ||
} | ||
exports.hasThenProperty = hasThenProperty; | ||
function hasChainedThen(node) { | ||
@@ -119,7 +139,5 @@ const parent = node.parent; | ||
} | ||
exports.hasChainedThen = hasChainedThen; | ||
function isPromiseIdentifier(node) { | ||
return utils_1.ASTUtils.isIdentifier(node) && node.name === 'Promise'; | ||
} | ||
exports.isPromiseIdentifier = isPromiseIdentifier; | ||
function isPromiseAll(node) { | ||
@@ -131,3 +149,2 @@ return ((0, is_node_of_type_1.isMemberExpression)(node.callee) && | ||
} | ||
exports.isPromiseAll = isPromiseAll; | ||
function isPromiseAllSettled(node) { | ||
@@ -139,3 +156,2 @@ return ((0, is_node_of_type_1.isMemberExpression)(node.callee) && | ||
} | ||
exports.isPromiseAllSettled = isPromiseAllSettled; | ||
function isPromisesArrayResolved(node) { | ||
@@ -152,3 +168,2 @@ const closestCallExpression = findClosestCallExpressionNode(node, true); | ||
} | ||
exports.isPromisesArrayResolved = isPromisesArrayResolved; | ||
function isPromiseHandled(nodeIdentifier) { | ||
@@ -176,3 +191,2 @@ const closestCallExpressionNode = findClosestCallExpressionNode(nodeIdentifier, true); | ||
} | ||
exports.isPromiseHandled = isPromiseHandled; | ||
function getRootExpression(expression) { | ||
@@ -216,3 +230,2 @@ const { parent } = expression; | ||
} | ||
exports.getVariableReferences = getVariableReferences; | ||
function getInnermostFunctionScope(context, asyncQueryNode) { | ||
@@ -226,3 +239,2 @@ const innermostScope = utils_1.ASTUtils.getInnermostScope((0, utils_2.getScope)(context, asyncQueryNode), asyncQueryNode); | ||
} | ||
exports.getInnermostFunctionScope = getInnermostFunctionScope; | ||
function getFunctionReturnStatementNode(functionNode) { | ||
@@ -241,3 +253,2 @@ if ((0, is_node_of_type_1.isBlockStatement)(functionNode.body)) { | ||
} | ||
exports.getFunctionReturnStatementNode = getFunctionReturnStatementNode; | ||
function getPropertyIdentifierNode(node) { | ||
@@ -258,3 +269,2 @@ if (utils_1.ASTUtils.isIdentifier(node)) { | ||
} | ||
exports.getPropertyIdentifierNode = getPropertyIdentifierNode; | ||
function getDeepestIdentifierNode(node) { | ||
@@ -275,3 +285,2 @@ if (utils_1.ASTUtils.isIdentifier(node)) { | ||
} | ||
exports.getDeepestIdentifierNode = getDeepestIdentifierNode; | ||
function getReferenceNode(node) { | ||
@@ -284,3 +293,2 @@ if (node.parent && | ||
} | ||
exports.getReferenceNode = getReferenceNode; | ||
function getFunctionName(node) { | ||
@@ -291,3 +299,2 @@ var _a, _b; | ||
} | ||
exports.getFunctionName = getFunctionName; | ||
function getImportModuleName(node) { | ||
@@ -304,3 +311,2 @@ if ((0, is_node_of_type_1.isImportDeclaration)(node) && typeof node.source.value === 'string') { | ||
} | ||
exports.getImportModuleName = getImportModuleName; | ||
function getAssertNodeInfo(node) { | ||
@@ -328,3 +334,2 @@ const emptyInfo = { matcher: null, isNegated: false }; | ||
} | ||
exports.getAssertNodeInfo = getAssertNodeInfo; | ||
const matcherNamesHandlePromise = [ | ||
@@ -351,3 +356,2 @@ 'resolves', | ||
} | ||
exports.hasClosestExpectResolvesRejects = hasClosestExpectResolvesRejects; | ||
function getInnermostReturningFunction(context, node) { | ||
@@ -368,3 +372,2 @@ const functionScope = getInnermostFunctionScope(context, node); | ||
} | ||
exports.getInnermostReturningFunction = getInnermostReturningFunction; | ||
function hasImportMatch(importNode, identifierName) { | ||
@@ -376,3 +379,2 @@ if (utils_1.ASTUtils.isIdentifier(importNode)) { | ||
} | ||
exports.hasImportMatch = hasImportMatch; | ||
function getStatementCallExpression(statement) { | ||
@@ -410,3 +412,2 @@ if ((0, is_node_of_type_1.isExpressionStatement)(statement)) { | ||
} | ||
exports.getStatementCallExpression = getStatementCallExpression; | ||
function isEmptyFunction(node) { | ||
@@ -418,3 +419,2 @@ if (utils_1.ASTUtils.isFunction(node) && (0, is_node_of_type_1.isBlockStatement)(node.body)) { | ||
} | ||
exports.isEmptyFunction = isEmptyFunction; | ||
function findImportSpecifier(specifierName, node) { | ||
@@ -452,2 +452,1 @@ if ((0, is_node_of_type_1.isImportDeclaration)(node)) { | ||
} | ||
exports.findImportSpecifier = findImportSpecifier; |
@@ -23,2 +23,3 @@ "use strict"; | ||
vue: ['error', { eventModule: ['fireEvent', 'userEvent'] }], | ||
svelte: ['error', { eventModule: ['fireEvent', 'userEvent'] }], | ||
marko: ['error', { eventModule: ['fireEvent', 'userEvent'] }], | ||
@@ -25,0 +26,0 @@ }, |
@@ -19,2 +19,3 @@ "use strict"; | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: 'error', | ||
@@ -21,0 +22,0 @@ }, |
@@ -19,2 +19,3 @@ "use strict"; | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: 'error', | ||
@@ -21,0 +22,0 @@ }, |
@@ -20,2 +20,3 @@ "use strict"; | ||
vue: false, | ||
svelte: false, | ||
marko: false, | ||
@@ -22,0 +23,0 @@ }, |
@@ -24,2 +24,3 @@ "use strict"; | ||
vue: false, | ||
svelte: false, | ||
marko: false, | ||
@@ -26,0 +27,0 @@ }, |
@@ -18,2 +18,3 @@ "use strict"; | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: 'error', | ||
@@ -20,0 +21,0 @@ }, |
@@ -19,2 +19,3 @@ "use strict"; | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: 'error', | ||
@@ -21,0 +22,0 @@ }, |
@@ -28,2 +28,3 @@ "use strict"; | ||
vue: 'warn', | ||
svelte: 'warn', | ||
marko: 'warn', | ||
@@ -30,0 +31,0 @@ }, |
@@ -30,2 +30,3 @@ "use strict"; | ||
vue: ['error', 'vue'], | ||
svelte: ['error', 'svelte'], | ||
marko: ['error', 'marko'], | ||
@@ -32,0 +33,0 @@ }, |
@@ -19,2 +19,3 @@ "use strict"; | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: 'error', | ||
@@ -21,0 +22,0 @@ }, |
@@ -21,2 +21,3 @@ "use strict"; | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: false, | ||
@@ -23,0 +24,0 @@ }, |
@@ -19,2 +19,3 @@ "use strict"; | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: 'error', | ||
@@ -21,0 +22,0 @@ }, |
@@ -20,2 +20,3 @@ "use strict"; | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: 'error', | ||
@@ -22,0 +23,0 @@ }, |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.findClosestBeforeHook = exports.RULE_NAME = void 0; | ||
exports.RULE_NAME = void 0; | ||
exports.findClosestBeforeHook = findClosestBeforeHook; | ||
const utils_1 = require("@typescript-eslint/utils"); | ||
@@ -23,3 +24,2 @@ const create_testing_library_rule_1 = require("../create-testing-library-rule"); | ||
} | ||
exports.findClosestBeforeHook = findClosestBeforeHook; | ||
exports.default = (0, create_testing_library_rule_1.createTestingLibraryRule)({ | ||
@@ -36,2 +36,3 @@ name: exports.RULE_NAME, | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: 'error', | ||
@@ -38,0 +39,0 @@ }, |
@@ -19,2 +19,3 @@ "use strict"; | ||
vue: false, | ||
svelte: false, | ||
marko: 'error', | ||
@@ -21,0 +22,0 @@ }, |
@@ -18,2 +18,3 @@ "use strict"; | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: 'error', | ||
@@ -20,0 +21,0 @@ }, |
@@ -18,2 +18,3 @@ "use strict"; | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: 'error', | ||
@@ -20,0 +21,0 @@ }, |
@@ -20,2 +20,3 @@ "use strict"; | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: 'error', | ||
@@ -22,0 +23,0 @@ }, |
@@ -52,2 +52,3 @@ "use strict"; | ||
vue: false, | ||
svelte: false, | ||
marko: false, | ||
@@ -54,0 +55,0 @@ }, |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.getFindByQueryVariant = exports.RULE_NAME = void 0; | ||
exports.RULE_NAME = void 0; | ||
exports.getFindByQueryVariant = getFindByQueryVariant; | ||
const utils_1 = require("@typescript-eslint/utils"); | ||
@@ -12,3 +13,2 @@ const create_testing_library_rule_1 = require("../create-testing-library-rule"); | ||
} | ||
exports.getFindByQueryVariant = getFindByQueryVariant; | ||
function findRenderDefinitionDeclaration(scope, query) { | ||
@@ -39,2 +39,3 @@ var _a; | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: 'error', | ||
@@ -41,0 +42,0 @@ }, |
@@ -45,2 +45,3 @@ "use strict"; | ||
vue: false, | ||
svelte: false, | ||
marko: false, | ||
@@ -47,0 +48,0 @@ }, |
@@ -17,2 +17,3 @@ "use strict"; | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: 'error', | ||
@@ -19,0 +20,0 @@ }, |
@@ -18,2 +18,3 @@ "use strict"; | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: 'error', | ||
@@ -20,0 +21,0 @@ }, |
@@ -17,2 +17,3 @@ "use strict"; | ||
vue: false, | ||
svelte: false, | ||
marko: false, | ||
@@ -19,0 +20,0 @@ }, |
@@ -30,2 +30,3 @@ "use strict"; | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: 'error', | ||
@@ -32,0 +33,0 @@ }, |
@@ -61,2 +61,3 @@ "use strict"; | ||
vue: false, | ||
svelte: false, | ||
marko: false, | ||
@@ -63,0 +64,0 @@ }, |
@@ -23,2 +23,3 @@ "use strict"; | ||
vue: 'error', | ||
svelte: 'error', | ||
marko: 'error', | ||
@@ -25,0 +26,0 @@ }, |
@@ -9,3 +9,4 @@ "use strict"; | ||
'vue', | ||
'svelte', | ||
'marko', | ||
]; |
@@ -13,8 +13,10 @@ import type { Linter, Rule } from 'eslint'; | ||
react: Linter.LegacyConfig; | ||
svelte: Linter.LegacyConfig; | ||
vue: Linter.LegacyConfig; | ||
'flat/angular': Linter.FlatConfig; | ||
'flat/dom': Linter.FlatConfig; | ||
'flat/marko': Linter.FlatConfig; | ||
'flat/react': Linter.FlatConfig; | ||
'flat/vue': Linter.FlatConfig; | ||
'flat/angular': Linter.Config<Linter.RulesRecord>; | ||
'flat/dom': Linter.Config<Linter.RulesRecord>; | ||
'flat/marko': Linter.Config<Linter.RulesRecord>; | ||
'flat/react': Linter.Config<Linter.RulesRecord>; | ||
'flat/svelte': Linter.Config<Linter.RulesRecord>; | ||
'flat/vue': Linter.Config<Linter.RulesRecord>; | ||
}; | ||
@@ -21,0 +23,0 @@ rules: { |
{ | ||
"name": "eslint-plugin-testing-library", | ||
"version": "7.0.0", | ||
"version": "7.1.0", | ||
"description": "ESLint plugin to follow best practices and anticipate common mistakes when writing tests with Testing Library", | ||
@@ -38,17 +38,17 @@ "keywords": [ | ||
"build": "tsc", | ||
"generate-all": "npm-run-all --parallel \"generate:*\"", | ||
"generate-all:check": "npm run generate-all && git diff --exit-code", | ||
"generate-all": "pnpm run --parallel \"/^generate:.*/\"", | ||
"generate-all:check": "pnpm run generate-all && git diff --exit-code", | ||
"generate:configs": "ts-node tools/generate-configs", | ||
"generate:rules-doc": "npm run build && npm run rule-doc-generator", | ||
"format": "npm run prettier-base -- --write", | ||
"format:check": "npm run prettier-base -- --check", | ||
"generate:rules-doc": "pnpm run build && pnpm run rule-doc-generator", | ||
"format": "pnpm run prettier-base --write", | ||
"format:check": "pnpm run prettier-base --check", | ||
"lint": "eslint . --max-warnings 0 --ext .js,.ts", | ||
"lint:fix": "npm run lint -- --fix", | ||
"prepare": "is-ci || husky install", | ||
"prettier-base": "prettier . --ignore-unknown --cache --loglevel warn", | ||
"lint:fix": "pnpm run lint --fix", | ||
"prepare": "is-ci || husky", | ||
"prettier-base": "prettier . --ignore-unknown --cache --log-level warn", | ||
"rule-doc-generator": "eslint-doc-generator", | ||
"semantic-release": "semantic-release", | ||
"test": "jest", | ||
"test:ci": "jest --ci --coverage", | ||
"test:watch": "npm run test -- --watch", | ||
"test:ci": "pnpm run test --ci --coverage", | ||
"test:watch": "pnpm run test --watch", | ||
"type-check": "tsc --noEmit" | ||
@@ -61,15 +61,12 @@ }, | ||
"devDependencies": { | ||
"@babel/core": "^7.25.8", | ||
"@babel/eslint-parser": "^7.25.8", | ||
"@babel/eslint-plugin": "^7.25.7", | ||
"@commitlint/cli": "^17.8.1", | ||
"@commitlint/config-conventional": "^17.8.1", | ||
"@swc/core": "^1.7.36", | ||
"@swc/jest": "^0.2.36", | ||
"@types/jest": "^27.5.2", | ||
"@types/node": "^22.8.6", | ||
"@commitlint/cli": "^19.6.0", | ||
"@commitlint/config-conventional": "^19.6.0", | ||
"@swc/core": "^1.9.3", | ||
"@swc/jest": "^0.2.37", | ||
"@types/jest": "^29.5.14", | ||
"@types/node": "^22.9.3", | ||
"@typescript-eslint/eslint-plugin": "^8.15.0", | ||
"@typescript-eslint/parser": "^8.15.0", | ||
"@typescript-eslint/rule-tester": "^8.15.0", | ||
"del-cli": "^5.1.0", | ||
"del-cli": "^6.0.0", | ||
"eslint": "^8.57.1", | ||
@@ -80,18 +77,17 @@ "eslint-config-prettier": "^9.1.0", | ||
"eslint-plugin-import": "^2.31.0", | ||
"eslint-plugin-jest": "^28.8.3", | ||
"eslint-plugin-jest": "^28.9.0", | ||
"eslint-plugin-jest-formatting": "^3.1.0", | ||
"eslint-plugin-node": "^11.1.0", | ||
"eslint-plugin-promise": "^6.6.0", | ||
"eslint-plugin-promise": "^7.1.0", | ||
"eslint-remote-tester": "^3.0.1", | ||
"eslint-remote-tester-repositories": "^1.0.1", | ||
"husky": "^8.0.3", | ||
"husky": "^9.1.7", | ||
"is-ci": "^3.0.1", | ||
"jest": "^28.1.3", | ||
"lint-staged": "^13.3.0", | ||
"npm-run-all2": "^5.0.2", | ||
"prettier": "^3.3.3", | ||
"semantic-release": "^19.0.5", | ||
"jest": "^29.7.0", | ||
"lint-staged": "^15.2.10", | ||
"prettier": "3.3.3", | ||
"semantic-release": "^24.2.0", | ||
"semver": "^7.6.3", | ||
"ts-node": "^10.9.2", | ||
"typescript": "5.0.4" | ||
"typescript": "^5.7.2" | ||
}, | ||
@@ -103,4 +99,5 @@ "peerDependencies": { | ||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0", | ||
"npm": ">=9.8.1" | ||
} | ||
"pnpm": "^9.14.0" | ||
}, | ||
"packageManager": "pnpm@9.14.2" | ||
} |
@@ -257,2 +257,31 @@ <div align="center"> | ||
### Svelte | ||
Enforces recommended rules for Svelte Testing Library. | ||
To enable this configuration use the `extends` property in your | ||
`.eslintrc.js` config file: | ||
```js | ||
module.exports = { | ||
extends: ['plugin:testing-library/svelte'], | ||
}; | ||
``` | ||
To enable this configuration with `eslint.config.js`, use | ||
`testingLibrary.configs['flat/svelte']`: | ||
```js | ||
const testingLibrary = require('eslint-plugin-testing-library'); | ||
module.exports = [ | ||
{ | ||
files: [ | ||
/* glob matching your test files */ | ||
], | ||
...testingLibrary.configs['flat/svelte'], | ||
}, | ||
]; | ||
``` | ||
### Marko | ||
@@ -297,31 +326,31 @@ | ||
| Name | Description | 💼 | ⚠️ | 🔧 | | ||
| :------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------- | :------------------------------------------------------------------ | :-- | | ||
| [await-async-events](docs/rules/await-async-events.md) | Enforce promises from async event methods are handled | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | 🔧 | | ||
| [await-async-queries](docs/rules/await-async-queries.md) | Enforce promises from async queries to be handled | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | | ||
| [await-async-utils](docs/rules/await-async-utils.md) | Enforce promises from async utils to be awaited properly | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | | ||
| [consistent-data-testid](docs/rules/consistent-data-testid.md) | Ensures consistent usage of `data-testid` | | | | | ||
| [no-await-sync-events](docs/rules/no-await-sync-events.md) | Disallow unnecessary `await` for sync events | ![badge-angular][] ![badge-dom][] ![badge-react][] | | | | ||
| [no-await-sync-queries](docs/rules/no-await-sync-queries.md) | Disallow unnecessary `await` for sync queries | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | | ||
| [no-container](docs/rules/no-container.md) | Disallow the use of `container` methods | ![badge-angular][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | | ||
| [no-debugging-utils](docs/rules/no-debugging-utils.md) | Disallow the use of debugging utilities like `debug` | | ![badge-angular][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | ||
| [no-dom-import](docs/rules/no-dom-import.md) | Disallow importing from DOM Testing Library | ![badge-angular][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | 🔧 | | ||
| [no-global-regexp-flag-in-query](docs/rules/no-global-regexp-flag-in-query.md) | Disallow the use of the global RegExp flag (/g) in queries | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | 🔧 | | ||
| [no-manual-cleanup](docs/rules/no-manual-cleanup.md) | Disallow the use of `cleanup` | ![badge-react][] ![badge-vue][] | | | | ||
| [no-node-access](docs/rules/no-node-access.md) | Disallow direct Node access | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | | ||
| [no-promise-in-fire-event](docs/rules/no-promise-in-fire-event.md) | Disallow the use of promises passed to a `fireEvent` method | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | | ||
| [no-render-in-lifecycle](docs/rules/no-render-in-lifecycle.md) | Disallow the use of `render` in testing frameworks setup functions | ![badge-angular][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | | ||
| [no-unnecessary-act](docs/rules/no-unnecessary-act.md) | Disallow wrapping Testing Library utils or empty callbacks in `act` | ![badge-marko][] ![badge-react][] | | | | ||
| [no-wait-for-multiple-assertions](docs/rules/no-wait-for-multiple-assertions.md) | Disallow the use of multiple `expect` calls inside `waitFor` | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | | ||
| [no-wait-for-side-effects](docs/rules/no-wait-for-side-effects.md) | Disallow the use of side effects in `waitFor` | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | | ||
| [no-wait-for-snapshot](docs/rules/no-wait-for-snapshot.md) | Ensures no snapshot is generated inside of a `waitFor` call | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | | ||
| [prefer-explicit-assert](docs/rules/prefer-explicit-assert.md) | Suggest using explicit assertions rather than standalone queries | | | | | ||
| [prefer-find-by](docs/rules/prefer-find-by.md) | Suggest using `find(All)By*` query instead of `waitFor` + `get(All)By*` to wait for elements | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | 🔧 | | ||
| [prefer-implicit-assert](docs/rules/prefer-implicit-assert.md) | Suggest using implicit assertions for getBy* & findBy* queries | | | | | ||
| [prefer-presence-queries](docs/rules/prefer-presence-queries.md) | Ensure appropriate `get*`/`query*` queries are used with their respective matchers | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | | ||
| [prefer-query-by-disappearance](docs/rules/prefer-query-by-disappearance.md) | Suggest using `queryBy*` queries when waiting for disappearance | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | | ||
| [prefer-query-matchers](docs/rules/prefer-query-matchers.md) | Ensure the configured `get*`/`query*` query is used with the corresponding matchers | | | | | ||
| [prefer-screen-queries](docs/rules/prefer-screen-queries.md) | Suggest using `screen` while querying | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | | ||
| [prefer-user-event](docs/rules/prefer-user-event.md) | Suggest using `userEvent` over `fireEvent` for simulating user interactions | | | | | ||
| [render-result-naming-convention](docs/rules/render-result-naming-convention.md) | Enforce a valid naming for return value from `render` | ![badge-angular][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | | ||
| Name | Description | 💼 | ⚠️ | 🔧 | | ||
| :------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------ | :-- | | ||
| [await-async-events](docs/rules/await-async-events.md) | Enforce promises from async event methods are handled | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | 🔧 | | ||
| [await-async-queries](docs/rules/await-async-queries.md) | Enforce promises from async queries to be handled | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | | | ||
| [await-async-utils](docs/rules/await-async-utils.md) | Enforce promises from async utils to be awaited properly | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | | | ||
| [consistent-data-testid](docs/rules/consistent-data-testid.md) | Ensures consistent usage of `data-testid` | | | | | ||
| [no-await-sync-events](docs/rules/no-await-sync-events.md) | Disallow unnecessary `await` for sync events | ![badge-angular][] ![badge-dom][] ![badge-react][] | | | | ||
| [no-await-sync-queries](docs/rules/no-await-sync-queries.md) | Disallow unnecessary `await` for sync queries | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | | | ||
| [no-container](docs/rules/no-container.md) | Disallow the use of `container` methods | ![badge-angular][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | | | ||
| [no-debugging-utils](docs/rules/no-debugging-utils.md) | Disallow the use of debugging utilities like `debug` | | ![badge-angular][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | | ||
| [no-dom-import](docs/rules/no-dom-import.md) | Disallow importing from DOM Testing Library | ![badge-angular][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | 🔧 | | ||
| [no-global-regexp-flag-in-query](docs/rules/no-global-regexp-flag-in-query.md) | Disallow the use of the global RegExp flag (/g) in queries | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | 🔧 | | ||
| [no-manual-cleanup](docs/rules/no-manual-cleanup.md) | Disallow the use of `cleanup` | ![badge-react][] ![badge-svelte][] ![badge-vue][] | | | | ||
| [no-node-access](docs/rules/no-node-access.md) | Disallow direct Node access | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | | | ||
| [no-promise-in-fire-event](docs/rules/no-promise-in-fire-event.md) | Disallow the use of promises passed to a `fireEvent` method | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | | | ||
| [no-render-in-lifecycle](docs/rules/no-render-in-lifecycle.md) | Disallow the use of `render` in testing frameworks setup functions | ![badge-angular][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | | | ||
| [no-unnecessary-act](docs/rules/no-unnecessary-act.md) | Disallow wrapping Testing Library utils or empty callbacks in `act` | ![badge-marko][] ![badge-react][] | | | | ||
| [no-wait-for-multiple-assertions](docs/rules/no-wait-for-multiple-assertions.md) | Disallow the use of multiple `expect` calls inside `waitFor` | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | | | ||
| [no-wait-for-side-effects](docs/rules/no-wait-for-side-effects.md) | Disallow the use of side effects in `waitFor` | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | | | ||
| [no-wait-for-snapshot](docs/rules/no-wait-for-snapshot.md) | Ensures no snapshot is generated inside of a `waitFor` call | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | | | ||
| [prefer-explicit-assert](docs/rules/prefer-explicit-assert.md) | Suggest using explicit assertions rather than standalone queries | | | | | ||
| [prefer-find-by](docs/rules/prefer-find-by.md) | Suggest using `find(All)By*` query instead of `waitFor` + `get(All)By*` to wait for elements | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | 🔧 | | ||
| [prefer-implicit-assert](docs/rules/prefer-implicit-assert.md) | Suggest using implicit assertions for getBy* & findBy* queries | | | | | ||
| [prefer-presence-queries](docs/rules/prefer-presence-queries.md) | Ensure appropriate `get*`/`query*` queries are used with their respective matchers | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | | | ||
| [prefer-query-by-disappearance](docs/rules/prefer-query-by-disappearance.md) | Suggest using `queryBy*` queries when waiting for disappearance | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | | | ||
| [prefer-query-matchers](docs/rules/prefer-query-matchers.md) | Ensure the configured `get*`/`query*` query is used with the corresponding matchers | | | | | ||
| [prefer-screen-queries](docs/rules/prefer-screen-queries.md) | Suggest using `screen` while querying | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | | | ||
| [prefer-user-event](docs/rules/prefer-user-event.md) | Suggest using `userEvent` over `fireEvent` for simulating user interactions | | | | | ||
| [render-result-naming-convention](docs/rules/render-result-naming-convention.md) | Enforce a valid naming for return value from `render` | ![badge-angular][] ![badge-marko][] ![badge-react][] ![badge-svelte][] ![badge-vue][] | | | | ||
@@ -328,0 +357,0 @@ <!-- end auto-generated rules list --> |
266612
1.13%30
-11.76%48
2.13%4542
1.2%578
5.28%