{"_id":"eslint-node-test","_rev":"5-1e0015c9beb07d4f5c05d5c33b69797e","name":"eslint-node-test","dist-tags":{"latest":"0.4.0"},"versions":{"0.0.1":{"name":"eslint-node-test","version":"0.0.1","keywords":["eslint","eslintplugin","eslint-plugin","node-test","node:test","test-runner","testing","test","linter","lint","style","xo"],"author":{"url":"https://sindresorhus.com","name":"Sindre Sorhus","email":"sindresorhus@gmail.com"},"license":"MIT","_id":"eslint-node-test@0.0.1","maintainers":[{"name":"sindresorhus","email":"sindresorhus@gmail.com"}],"homepage":"https://github.com/sindresorhus/eslint-node-test#readme","bugs":{"url":"https://github.com/sindresorhus/eslint-node-test/issues"},"dist":{"shasum":"3c5dafd6a41895cef14857d90341ec80e38378ae","tarball":"https://registry.npmjs.org/eslint-node-test/-/eslint-node-test-0.0.1.tgz","fileCount":112,"integrity":"sha512-KNQMixlVl3Tknv0qg/8AHMXlP5OlilUWS1z12ft84u16a2bBGGnu1CwcOaOTjGmRFs4w07LGhrtQ2fh4VELhEg==","signatures":[{"sig":"MEUCIDJXJ1qKV2fQFA7DzD5OSLj5j6pI+xaMeFMsdCbXZuNTAiEAu23AhFEftLzHcgQjrNjVf4Iau5+3oaXKhVVNsR7y7FM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232864},"type":"module","types":"./index.d.ts","engines":{"node":">=22"},"exports":{"types":"./index.d.ts","default":"./index.js"},"funding":"https://github.com/sindresorhus/eslint-node-test?sponsor=1","gitHead":"6796342ce6a7284147dd5975938d5502671de00a","scripts":{"fix":"run-p --continue-on-error \"fix:*\"","lint":"run-p --continue-on-error \"lint:*\"","test":"npm-run-all --node-run --continue-on-error lint \"test:*\"","fix:js":"npm run lint:js -- --fix","lint:js":"eslint","test:js":"node --test test/*.js test/unit/*.js","coverage":"node --test --experimental-test-coverage test/*.js test/unit/*.js","create-rule":"node ./scripts/create-rule.js && npm run create-rules-index-file && npm run fix:eslint-docs","rename-rule":"node ./scripts/rename-rule.js && npm run create-rules-index-file && npm run fix:eslint-docs","fix:markdown":"npm run lint:markdown -- --fix","fix:snapshots":"node --test --test-update-snapshots test/*.js test/unit/*.js","lint:markdown":"markdownlint \"**/*.md\"","fix:eslint-docs":"eslint-doc-generator","lint:dogfooding":"eslint --config=./eslint.dogfooding.config.js","lint:eslint-docs":"npm run fix:eslint-docs -- --check","lint:package-json":"npmPkgJsonLint .","run-rules-on-codebase":"npm run lint:dogfooding","create-rules-index-file":"node ./scripts/create-rules-index-file.js"},"_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"repository":{"url":"git+https://github.com/sindresorhus/eslint-node-test.git","type":"git"},"_npmVersion":"11.18.0","description":"ESLint rules for the Node.js built-in test runner (`node:test`)","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"jsesc":"^3.1.0","globals":"^17.6.0","pluralize":"^8.0.0","@eslint-community/eslint-utils":"^4.9.1","@babel/helper-validator-identifier":"^7.29.7"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.9.0","eslint":"^10.4.1","espree":"^11.2.0","listr2":"^10.2.1","outdent":"^0.8.0","enquirer":"^2.4.1","pretty-ms":"^9.3.0","nano-spawn":"^2.1.0","typescript":"^6.0.3","@eslint/css":"^1.3.0","open-editor":"^6.0.0","@eslint/json":"^2.0.0","eslint-scope":"^9.1.2","npm-run-all2":"^9.0.1","indent-string":"^5.0.0","node-style-text":"^2.1.2","@eslint/eslintrc":"^3.3.5","@eslint/markdown":"^8.0.2","eslint-config-xo":"^0.52.0","markdownlint-cli":"^0.48.0","@babel/code-frame":"^8.0.0-rc.6","vue-eslint-parser":"^10.4.1","@html-eslint/parser":"^0.62.0","eslint-plugin-jsdoc":"^63.0.2","eslint-doc-generator":"^3.6.0","eslint-plugin-unicorn":"^65.0.1","npm-package-json-lint":"^10.4.0","@typescript-eslint/types":"^8.61.0","@typescript-eslint/parser":"^8.61.0","@html-eslint/eslint-plugin":"^0.62.0","eslint-plugin-eslint-plugin":"^7.4.0","@lubien/fixture-beta-package":"^1.0.0-beta.1"},"peerDependencies":{"eslint":">=10.4"},"_npmOperationalInternal":{"tmp":"tmp/eslint-node-test_0.0.1_1782939584046_0.5063376652438791","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"eslint-node-test","version":"0.1.0","keywords":["eslint","eslintplugin","eslint-plugin","node-test","node:test","test-runner","testing","test","linter","lint","style","xo"],"author":{"url":"https://sindresorhus.com","name":"Sindre Sorhus","email":"sindresorhus@gmail.com"},"license":"MIT","_id":"eslint-node-test@0.1.0","maintainers":[{"name":"sindresorhus","email":"sindresorhus@gmail.com"}],"homepage":"https://github.com/sindresorhus/eslint-node-test#readme","bugs":{"url":"https://github.com/sindresorhus/eslint-node-test/issues"},"dist":{"shasum":"cd9a556b3b2d3bbc66dcc0b3a7a3a33bfcb7d071","tarball":"https://registry.npmjs.org/eslint-node-test/-/eslint-node-test-0.1.0.tgz","fileCount":110,"integrity":"sha512-J/MqjvRd6OHNm1KLr0dXz8SM6VwOphungoWp/EvyQn/+WbxdsB2juMrtEHZJ9kdomIgR9K4SqLLdWARXfttzVA==","signatures":[{"sig":"MEUCIQDdKdlIGzSP6EstCmKsHa7JCemhZTyC66afPYdeW9KzbwIgBKAm1+ZIb3iSCSb6+r81EupMu1NCEq+684ftYcT+h8s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":229662},"type":"module","types":"./index.d.ts","engines":{"node":">=22"},"exports":{"types":"./index.d.ts","default":"./index.js"},"funding":"https://github.com/sindresorhus/eslint-node-test?sponsor=1","gitHead":"e6bd9db91a689620ead663e5468fa99393b8f4e2","scripts":{"fix":"run-p --continue-on-error \"fix:*\"","lint":"run-p --continue-on-error \"lint:*\"","test":"npm-run-all --node-run --continue-on-error lint \"test:*\"","fix:js":"npm run lint:js -- --fix","lint:js":"eslint","test:js":"node --test test/*.js test/unit/*.js","coverage":"node --test --experimental-test-coverage test/*.js test/unit/*.js","create-rule":"node ./scripts/create-rule.js && npm run create-rules-index-file && npm run fix:eslint-docs","rename-rule":"node ./scripts/rename-rule.js && npm run create-rules-index-file && npm run fix:eslint-docs","fix:markdown":"npm run lint:markdown -- --fix","fix:snapshots":"node --test --test-update-snapshots test/*.js test/unit/*.js","lint:markdown":"markdownlint \"**/*.md\"","fix:eslint-docs":"eslint-doc-generator","lint:dogfooding":"eslint --config=./eslint.dogfooding.config.js","lint:eslint-docs":"npm run fix:eslint-docs -- --check","lint:package-json":"npmPkgJsonLint .","run-rules-on-codebase":"npm run lint:dogfooding","create-rules-index-file":"node ./scripts/create-rules-index-file.js"},"_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"repository":{"url":"git+https://github.com/sindresorhus/eslint-node-test.git","type":"git"},"_npmVersion":"11.18.0","description":"ESLint rules for the Node.js built-in test runner (`node:test`)","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"@eslint-community/eslint-utils":"^4.9.1"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.9.0","eslint":"^10.6.0","espree":"^11.2.0","globals":"^17.7.0","outdent":"^0.8.0","enquirer":"^2.4.1","nano-spawn":"^2.1.0","typescript":"^6.0.3","open-editor":"^6.0.0","eslint-scope":"^9.1.2","npm-run-all2":"^9.0.2","indent-string":"^5.0.0","eslint-config-xo":"^0.56.0","markdownlint-cli":"^0.49.0","@babel/code-frame":"^8.0.0","vue-eslint-parser":"^10.4.1","eslint-plugin-jsdoc":"^63.0.10","eslint-doc-generator":"^3.6.0","npm-package-json-lint":"^10.4.1","@typescript-eslint/types":"^8.62.1","@typescript-eslint/parser":"^8.62.1","eslint-plugin-eslint-plugin":"^7.4.1"},"peerDependencies":{"eslint":">=10.4"},"_npmOperationalInternal":{"tmp":"tmp/eslint-node-test_0.1.0_1782992320209_0.19760438830818372","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"eslint-node-test","version":"0.2.0","keywords":["eslint","eslintplugin","eslint-plugin","node-test","node:test","test-runner","testing","test","linter","lint","style","xo"],"author":{"url":"https://sindresorhus.com","name":"Sindre Sorhus","email":"sindresorhus@gmail.com"},"license":"MIT","_id":"eslint-node-test@0.2.0","maintainers":[{"name":"sindresorhus","email":"sindresorhus@gmail.com"}],"homepage":"https://github.com/sindresorhus/eslint-node-test#readme","bugs":{"url":"https://github.com/sindresorhus/eslint-node-test/issues"},"dist":{"shasum":"120c4bb040b8cd7ca9f546046196f41d80f9ba86","tarball":"https://registry.npmjs.org/eslint-node-test/-/eslint-node-test-0.2.0.tgz","fileCount":127,"integrity":"sha512-JnP6034mkFxGL9mWVrhADT3EOTpDmHwYILS40OeSGthpTkG3SUIyd6EcRhPAupWUjw6MbgfpR74/n3K4ssG8Uw==","signatures":[{"sig":"MEQCIB9NiDx+KeT38vzqfbnPFyyC91DqiOnjfgkv44jWJ7EvAiBl8j1+VgLXhbyyIoLC0MFnfH3gIHb/noqu38YdcRGx4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":357827},"type":"module","types":"./index.d.ts","engines":{"node":">=22"},"exports":{"types":"./index.d.ts","default":"./index.js"},"funding":"https://github.com/sindresorhus/eslint-node-test?sponsor=1","gitHead":"b0b1a6a140b68c0eb3dadeaa3fe4e68da3c679c2","scripts":{"fix":"run-p --continue-on-error \"fix:*\"","lint":"run-p --continue-on-error \"lint:*\"","test":"npm-run-all --node-run --continue-on-error lint \"test:*\"","fix:js":"npm run lint:js -- --fix","lint:js":"eslint","test:js":"node --test test/*.js test/unit/*.js","coverage":"node --test --experimental-test-coverage test/*.js test/unit/*.js","create-rule":"node ./scripts/create-rule.js && npm run create-rules-index-file && npm run fix:eslint-docs","rename-rule":"node ./scripts/rename-rule.js && npm run create-rules-index-file && npm run fix:eslint-docs","fix:markdown":"npm run lint:markdown -- --fix","fix:snapshots":"node --test --test-update-snapshots test/*.js test/unit/*.js","lint:markdown":"markdownlint \"**/*.md\"","fix:eslint-docs":"eslint-doc-generator","lint:dogfooding":"eslint --config=./eslint.dogfooding.config.js","lint:eslint-docs":"npm run fix:eslint-docs -- --check","lint:package-json":"npmPkgJsonLint .","run-rules-on-codebase":"npm run lint:dogfooding","create-rules-index-file":"node ./scripts/create-rules-index-file.js"},"_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"repository":{"url":"git+https://github.com/sindresorhus/eslint-node-test.git","type":"git"},"_npmVersion":"11.18.0","description":"ESLint rules for the Node.js built-in test runner (`node:test`)","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"quote-js-string":"^0.1.0","@eslint-community/eslint-utils":"^4.9.1"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.9.0","eslint":"^10.6.0","espree":"^11.2.0","globals":"^17.7.0","outdent":"^0.8.0","enquirer":"^2.4.1","nano-spawn":"^2.1.0","typescript":"^6.0.3","open-editor":"^6.0.0","eslint-scope":"^9.1.2","npm-run-all2":"^9.0.2","indent-string":"^5.0.0","eslint-config-xo":"^0.56.0","markdownlint-cli":"^0.49.0","@babel/code-frame":"^8.0.0","vue-eslint-parser":"^10.4.1","eslint-plugin-jsdoc":"^63.0.10","eslint-doc-generator":"^3.6.0","npm-package-json-lint":"^10.4.1","@typescript-eslint/types":"^8.62.1","@typescript-eslint/parser":"^8.62.1","eslint-plugin-eslint-plugin":"^7.4.1"},"peerDependencies":{"eslint":">=10.4"},"_npmOperationalInternal":{"tmp":"tmp/eslint-node-test_0.2.0_1783175475527_0.7181726661403287","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"eslint-node-test","version":"0.3.0","keywords":["eslint","eslintplugin","eslint-plugin","node-test","node:test","test-runner","testing","test","linter","lint","style","xo"],"author":{"url":"https://sindresorhus.com","name":"Sindre Sorhus","email":"sindresorhus@gmail.com"},"license":"MIT","_id":"eslint-node-test@0.3.0","maintainers":[{"name":"sindresorhus","email":"sindresorhus@gmail.com"}],"homepage":"https://github.com/sindresorhus/eslint-node-test#readme","bugs":{"url":"https://github.com/sindresorhus/eslint-node-test/issues"},"dist":{"shasum":"35c4cba8ffce8253a68d557f13a250fba8aa496c","tarball":"https://registry.npmjs.org/eslint-node-test/-/eslint-node-test-0.3.0.tgz","fileCount":139,"integrity":"sha512-aV1YX7ydDH7VCDsBWNNuicISdujCaHiprs+vYSdechPAAS3HWR00HTHgDYTSnMqTlLJOnkvgi1jV1cB1TNV56Q==","signatures":[{"sig":"MEUCIGXy+cAZjvk9pZ0nTm9PV/q2GV88+uQaEq+qpl6vPt/WAiEAxvwh/sG6D1P1js5EK66l0vf0ecm8xu2fHQO0gGvOsbg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":431239},"type":"module","types":"./index.d.ts","engines":{"node":">=22"},"exports":{"types":"./index.d.ts","default":"./index.js"},"funding":"https://github.com/sindresorhus/eslint-node-test?sponsor=1","gitHead":"4ff9c642acc3313e780e59bb107a9fdce1b55c16","scripts":{"fix":"run-p --continue-on-error \"fix:*\"","lint":"run-p --continue-on-error \"lint:*\"","test":"npm-run-all --node-run --continue-on-error lint \"test:*\"","fix:js":"npm run lint:js -- --fix","lint:js":"eslint","test:js":"node --test test/*.js test/unit/*.js","coverage":"node --test --experimental-test-coverage test/*.js test/unit/*.js","create-rule":"node ./scripts/create-rule.js && npm run create-rules-index-file && npm run fix:eslint-docs","rename-rule":"node ./scripts/rename-rule.js && npm run create-rules-index-file && npm run fix:eslint-docs","fix:markdown":"npm run lint:markdown -- --fix","fix:snapshots":"node --test --test-update-snapshots test/*.js test/unit/*.js","lint:markdown":"markdownlint \"**/*.md\"","fix:eslint-docs":"eslint-doc-generator","lint:dogfooding":"eslint --config=./eslint.dogfooding.config.js","lint:eslint-docs":"npm run fix:eslint-docs -- --check","lint:package-json":"npmPkgJsonLint .","run-rules-on-codebase":"npm run lint:dogfooding","create-rules-index-file":"node ./scripts/create-rules-index-file.js"},"_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"repository":{"url":"git+https://github.com/sindresorhus/eslint-node-test.git","type":"git"},"_npmVersion":"11.18.0","description":"ESLint rules for the Node.js built-in test runner (`node:test`)","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"quote-js-string":"^0.1.0","@eslint-community/eslint-utils":"^4.9.1"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.9.0","eslint":"^10.6.0","espree":"^11.2.0","globals":"^17.7.0","outdent":"^0.8.0","enquirer":"^2.4.1","nano-spawn":"^2.1.0","typescript":"^6.0.3","open-editor":"^6.0.0","eslint-scope":"^9.1.2","npm-run-all2":"^9.0.2","indent-string":"^5.0.0","eslint-config-xo":"^0.56.0","markdownlint-cli":"^0.49.0","@babel/code-frame":"^8.0.0","vue-eslint-parser":"^10.4.1","eslint-plugin-jsdoc":"^63.0.10","eslint-doc-generator":"^3.6.0","npm-package-json-lint":"^10.4.1","@typescript-eslint/types":"^8.62.1","@typescript-eslint/parser":"^8.62.1","eslint-plugin-eslint-plugin":"^7.4.1"},"peerDependencies":{"eslint":">=10.4"},"_npmOperationalInternal":{"tmp":"tmp/eslint-node-test_0.3.0_1784053894491_0.5210893445582339","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"eslint-node-test","version":"0.4.0","description":"ESLint rules for the Node.js built-in test runner (`node:test`)","license":"MIT","repository":{"type":"git","url":"git+https://github.com/sindresorhus/eslint-node-test.git"},"funding":"https://github.com/sindresorhus/eslint-node-test?sponsor=1","author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"https://sindresorhus.com"},"type":"module","exports":{"types":"./index.d.ts","default":"./index.js"},"sideEffects":false,"engines":{"node":">=22"},"scripts":{"coverage":"node --test --experimental-test-coverage test/*.js test/unit/*.js","create-rule":"node ./scripts/create-rule.js && npm run create-rules-index-file && npm run fix:eslint-docs","create-rules-index-file":"node ./scripts/create-rules-index-file.js","fix":"run-p --continue-on-error \"fix:*\"","fix:eslint-docs":"eslint-doc-generator","fix:js":"npm run lint:js -- --fix","fix:markdown":"npm run lint:markdown -- --fix","fix:snapshots":"node --test --test-update-snapshots test/*.js test/unit/*.js","lint":"run-p --continue-on-error \"lint:*\"","lint:dogfooding":"eslint --config=./eslint.dogfooding.config.js","lint:eslint-docs":"npm run fix:eslint-docs -- --check","lint:js":"eslint","lint:markdown":"markdownlint \"**/*.md\"","lint:package-json":"npmPkgJsonLint .","rename-rule":"node ./scripts/rename-rule.js && npm run create-rules-index-file && npm run fix:eslint-docs","run-rules-on-codebase":"npm run lint:dogfooding","test":"npm-run-all --node-run --continue-on-error lint \"test:*\"","test:js":"node --test test/*.js test/unit/*.js"},"keywords":["eslint","eslintplugin","eslint-plugin","node-test","node:test","test-runner","testing","test","linter","lint","style","xo"],"dependencies":{"@eslint-community/eslint-utils":"^4.9.1","quote-js-string":"^0.1.0"},"devDependencies":{"@babel/code-frame":"^8.0.0","@typescript-eslint/parser":"^8.62.1","@typescript-eslint/types":"^8.62.1","enquirer":"^2.4.1","eslint":"^10.6.0","eslint-config-xo":"^0.56.0","eslint-doc-generator":"^3.6.0","eslint-plugin-eslint-plugin":"^7.4.1","eslint-plugin-jsdoc":"^63.0.10","eslint-scope":"^9.1.2","espree":"^11.2.0","globals":"^17.7.0","indent-string":"^5.0.0","markdownlint-cli":"^0.49.0","nano-spawn":"^2.1.0","npm-package-json-lint":"^10.4.1","npm-run-all2":"^9.0.2","open-editor":"^6.0.0","outdent":"^0.8.0","typescript":"^6.0.3","vue-eslint-parser":"^10.4.1","yaml":"^2.9.0"},"peerDependencies":{"eslint":">=10.4"},"gitHead":"7709eb982b0efbc1ca052f1f3b2a7736c3177523","types":"./index.d.ts","_id":"eslint-node-test@0.4.0","bugs":{"url":"https://github.com/sindresorhus/eslint-node-test/issues"},"homepage":"https://github.com/sindresorhus/eslint-node-test#readme","_nodeVersion":"22.23.1","_npmVersion":"12.0.1","dist":{"integrity":"sha512-PnHvPZASsqWFoRlyivgQa4VFcA5o8psqp6SWrDG2e0MJBcq7ajRDV2H7oqiWOa3qmFLvCm2cZ/+hv+y455ZgEQ==","shasum":"6b2aa33b46fdaaeda1e026e3399e11283e015b1c","tarball":"https://registry.npmjs.org/eslint-node-test/-/eslint-node-test-0.4.0.tgz","fileCount":141,"unpackedSize":428449,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB9+k5aAMvvPQMXQVYjJjO3UqJAdtAjUGS825JsjYCRaAiEA9nLDcZd7wb6wJAG3fdekuSAtSSV816N66JSsysN/39s="}]},"_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"directories":{},"maintainers":[{"name":"sindresorhus","email":"sindresorhus@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-node-test_0.4.0_1784976319567_0.39470277297738154"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-01T20:59:44.004Z","modified":"2026-07-25T10:45:19.952Z","0.0.1":"2026-07-01T20:59:44.157Z","0.1.0":"2026-07-02T11:38:40.377Z","0.2.0":"2026-07-04T14:31:15.668Z","0.3.0":"2026-07-14T18:31:34.643Z","0.4.0":"2026-07-25T10:45:19.754Z"},"bugs":{"url":"https://github.com/sindresorhus/eslint-node-test/issues"},"author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"https://sindresorhus.com"},"license":"MIT","homepage":"https://github.com/sindresorhus/eslint-node-test#readme","keywords":["eslint","eslintplugin","eslint-plugin","node-test","node:test","test-runner","testing","test","linter","lint","style","xo"],"repository":{"type":"git","url":"git+https://github.com/sindresorhus/eslint-node-test.git"},"description":"ESLint rules for the Node.js built-in test runner (`node:test`)","maintainers":[{"name":"sindresorhus","email":"sindresorhus@gmail.com"}],"readme":"# eslint-node-test\n\n> ESLint rules for the [Node.js built-in test runner](https://nodejs.org/api/test.html) (`node:test`)\n\nThis plugin helps you avoid common mistakes and write more consistent tests with `node:test`, the test runner built into Node.js.\n\n## Install\n\n```sh\nnpm install --save-dev eslint eslint-node-test\n```\n\n**Requires ESLint `>=10.4`, [flat config](https://eslint.org/docs/latest/use/configure/configuration-files), and [ESM](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#how-can-i-make-my-typescript-project-output-esm).**\n\n## Usage\n\nUse a [preset config](#preset-configs) or configure each rule in `eslint.config.js`.\n\n```js\nimport nodeTest from 'eslint-node-test';\nimport {defineConfig} from 'eslint/config';\n\nexport default defineConfig([\n\t{\n\t\tfiles: [\n\t\t\t'**/*.js'\n\t\t],\n\t\tplugins: {\n\t\t\t'node-test': nodeTest\n\t\t},\n\t\textends: [\n\t\t\t'node-test/recommended'\n\t\t]\n\t}\n]);\n```\n\nOr configure rules individually:\n\n```js\nimport nodeTest from 'eslint-node-test';\nimport {defineConfig} from 'eslint/config';\n\nexport default defineConfig([\n\t{\n\t\tfiles: [\n\t\t\t'**/*.js'\n\t\t],\n\t\tplugins: {\n\t\t\t'node-test': nodeTest\n\t\t},\n\t\trules: {\n\t\t\t'node-test/no-only-test': 'error',\n\t\t\t'node-test/no-identical-title': 'error'\n\t\t}\n\t}\n]);\n```\n\nThe example scopes the plugin to JavaScript files. Add TypeScript extensions only when your ESLint config provides a TypeScript parser for them. The rules only activate in files that import from `node:test` (and assertion rules also activate for Node's built-in `assert` module), so you can safely apply the plugin across your whole project.\n\n## Rules\n\n<!-- begin auto-generated rules list -->\n\n💼 [Configurations](https://github.com/sindresorhus/eslint-node-test#preset-configs) enabled in.\\\n✅ Set in the `recommended` [configuration](https://github.com/sindresorhus/eslint-node-test#preset-configs).\\\n☑️ Set in the `unopinionated` [configuration](https://github.com/sindresorhus/eslint-node-test#preset-configs).\\\n🔧 Automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/user-guide/command-line-interface#--fix).\\\n💡 Manually fixable by [editor suggestions](https://eslint.org/docs/latest/use/core-concepts#rule-suggestions).\n\n| Name                                                                                             | Description                                                                                                | 💼   | 🔧 | 💡 |\n| :----------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------- | :--- | :- | :- |\n| [assertion-arguments](docs/rules/assertion-arguments.md)                                         | Enforce the correct number of arguments for `node:assert` assertions.                                      | ✅ ☑️ |    |    |\n| [consistent-assert-style](docs/rules/consistent-assert-style.md)                                 | Enforce a consistent truthiness assertion style.                                                           | ✅    | 🔧 |    |\n| [consistent-assert-throws-callback-style](docs/rules/consistent-assert-throws-callback-style.md) | Enforce a consistent body style for `assert.throws()` arrow callbacks.                                     |      | 🔧 |    |\n| [consistent-modifier-style](docs/rules/consistent-modifier-style.md)                             | Enforce a consistent style for test modifiers.                                                             |      |    |    |\n| [consistent-test-context-name](docs/rules/consistent-test-context-name.md)                       | Enforce a consistent name for the test context parameter.                                                  | ✅ ☑️ |    |    |\n| [consistent-test-filename](docs/rules/consistent-test-filename.md)                               | Enforce a consistent test file name pattern.                                                               |      |    |    |\n| [consistent-test-it](docs/rules/consistent-test-it.md)                                           | Enforce consistent use of `test` or `it`.                                                                  |      |    |    |\n| [hooks-order](docs/rules/hooks-order.md)                                                         | Enforce a consistent order of hook declarations.                                                           | ✅ ☑️ | 🔧 |    |\n| [max-assertions](docs/rules/max-assertions.md)                                                   | Enforce a maximum number of assertions in a test.                                                          |      |    |    |\n| [max-nested-describe](docs/rules/max-nested-describe.md)                                         | Enforce a maximum depth for nested `describe` blocks.                                                      | ✅    |    |    |\n| [no-assert-in-describe](docs/rules/no-assert-in-describe.md)                                     | Disallow assertions directly inside a `describe` body.                                                     | ✅    |    |    |\n| [no-assert-in-hook](docs/rules/no-assert-in-hook.md)                                             | Disallow assertions inside hooks.                                                                          |      |    |    |\n| [no-assert-match-string](docs/rules/no-assert-match-string.md)                                   | Disallow strings as the regexp argument of `assert.match()`/`assert.doesNotMatch()`.                       | ✅ ☑️ |    | 💡 |\n| [no-assert-throws-async](docs/rules/no-assert-throws-async.md)                                   | Disallow passing an async function to `assert.throws()`/`assert.doesNotThrow()`.                           | ✅ ☑️ |    | 💡 |\n| [no-assert-throws-call](docs/rules/no-assert-throws-call.md)                                     | Disallow calling the function passed to `assert.throws()`.                                                 | ✅ ☑️ |    | 💡 |\n| [no-assert-throws-multiple-statements](docs/rules/no-assert-throws-multiple-statements.md)       | Disallow multiple statements in `assert.throws()`/`assert.rejects()` callbacks.                            | ✅    |    |    |\n| [no-assert-throws-string](docs/rules/no-assert-throws-string.md)                                 | Disallow a string as the error matcher of `assert.throws()`/`assert.rejects()`.                            | ✅ ☑️ |    | 💡 |\n| [no-async-describe](docs/rules/no-async-describe.md)                                             | Disallow `async` `describe` callbacks.                                                                     | ✅ ☑️ |    |    |\n| [no-async-fn-without-await](docs/rules/no-async-fn-without-await.md)                             | Disallow async test/hook functions that have no `await` expression.                                        | ✅ ☑️ |    | 💡 |\n| [no-callback-and-promise](docs/rules/no-callback-and-promise.md)                                 | Disallow a test or hook from using both a callback and a Promise.                                          | ✅ ☑️ |    |    |\n| [no-commented-tests](docs/rules/no-commented-tests.md)                                           | Disallow commented-out tests.                                                                              |      |    |    |\n| [no-compound-assertion](docs/rules/no-compound-assertion.md)                                     | Disallow compound truthiness assertions.                                                                   | ✅ ☑️ | 🔧 |    |\n| [no-conditional-assertion](docs/rules/no-conditional-assertion.md)                               | Disallow assertions inside conditional code within a test.                                                 | ✅ ☑️ |    |    |\n| [no-conditional-in-test](docs/rules/no-conditional-in-test.md)                                   | Disallow conditional logic inside tests.                                                                   |      |    |    |\n| [no-conditional-tests](docs/rules/no-conditional-tests.md)                                       | Disallow conditionally registering tests, suites, and hooks.                                               | ✅    |    |    |\n| [no-conflicting-modifiers](docs/rules/no-conflicting-modifiers.md)                               | Disallow conflicting test modifiers.                                                                       | ✅ ☑️ |    |    |\n| [no-constant-assertion](docs/rules/no-constant-assertion.md)                                     | Disallow assertions with constant outcomes.                                                                | ✅ ☑️ |    |    |\n| [no-done-callback](docs/rules/no-done-callback.md)                                               | Disallow callback (`done`) parameters in tests and hooks.                                                  |      |    |    |\n| [no-duplicate-assertions](docs/rules/no-duplicate-assertions.md)                                 | Disallow adjacent duplicate assertions.                                                                    | ✅ ☑️ |    |    |\n| [no-duplicate-hooks](docs/rules/no-duplicate-hooks.md)                                           | Disallow duplicate hooks within the same scope.                                                            | ✅    |    |    |\n| [no-duplicate-mock-timers-enable](docs/rules/no-duplicate-mock-timers-enable.md)                 | Disallow enabling mock timers more than once without resetting them.                                       | ✅ ☑️ |    |    |\n| [no-duplicate-plan](docs/rules/no-duplicate-plan.md)                                             | Disallow setting a test plan more than once in the same test.                                              | ✅ ☑️ |    |    |\n| [no-expect-failure-without-reason](docs/rules/no-expect-failure-without-reason.md)               | Require a reason when marking a test or suite as expected to fail.                                         | ✅    |    |    |\n| [no-export](docs/rules/no-export.md)                                                             | Disallow exports from test files.                                                                          | ✅    |    |    |\n| [no-identical-assertion-arguments](docs/rules/no-identical-assertion-arguments.md)               | Disallow comparing a value to itself in an assertion.                                                      | ✅ ☑️ |    |    |\n| [no-identical-title](docs/rules/no-identical-title.md)                                           | Disallow identical test titles within the same scope.                                                      | ✅ ☑️ |    |    |\n| [no-import-test-files](docs/rules/no-import-test-files.md)                                       | Disallow imports of Node.js test files.                                                                    | ✅ ☑️ |    |    |\n| [no-incorrect-deep-equal](docs/rules/no-incorrect-deep-equal.md)                                 | Disallow `deepEqual`/`deepStrictEqual` (and their `notDeep*` variants) when comparing with primitives.     | ✅ ☑️ | 🔧 |    |\n| [no-incorrect-strict-equal](docs/rules/no-incorrect-strict-equal.md)                             | Disallow `strictEqual`/`equal` (and their `not*` variants) when comparing with an object or array literal. | ✅ ☑️ | 🔧 |    |\n| [no-late-test-activity](docs/rules/no-late-test-activity.md)                                     | Disallow test activity inside detached asynchronous callbacks.                                             | ✅ ☑️ | 🔧 |    |\n| [no-loop-static-title](docs/rules/no-loop-static-title.md)                                       | Disallow a static test or suite title inside a loop.                                                       | ✅ ☑️ |    |    |\n| [no-misused-concurrency](docs/rules/no-misused-concurrency.md)                                   | Disallow the `concurrency` option on a test without subtests.                                              | ✅ ☑️ |    |    |\n| [no-misused-context-hook](docs/rules/no-misused-context-hook.md)                                 | Disallow context hooks without runnable subtests.                                                          | ✅ ☑️ |    |    |\n| [no-mock-module-after-import](docs/rules/no-mock-module-after-import.md)                         | Disallow mocking a module after statically importing it.                                                   | ✅ ☑️ |    |    |\n| [no-mock-timers-destructured-import](docs/rules/no-mock-timers-destructured-import.md)           | Disallow destructured timer imports when using `mock.timers`.                                              | ✅ ☑️ |    |    |\n| [no-nested-tests](docs/rules/no-nested-tests.md)                                                 | Disallow tests and suites nested inside a test body.                                                       | ✅ ☑️ |    |    |\n| [no-only-test](docs/rules/no-only-test.md)                                                       | Disallow the `.only` test modifier.                                                                        | ✅ ☑️ |    | 💡 |\n| [no-parent-test-context](docs/rules/no-parent-test-context.md)                                   | Disallow references to parent test contexts inside subtests.                                               | ✅ ☑️ |    | 💡 |\n| [no-process-chdir-in-test](docs/rules/no-process-chdir-in-test.md)                               | Disallow changing the working directory inside tests.                                                      | ✅    |    |    |\n| [no-process-env-mutation](docs/rules/no-process-env-mutation.md)                                 | Disallow mutating `process.env` inside tests.                                                              | ✅    |    |    |\n| [no-process-exit-in-test](docs/rules/no-process-exit-in-test.md)                                 | Disallow process exit control in test files.                                                               | ✅ ☑️ |    |    |\n| [no-skip-test](docs/rules/no-skip-test.md)                                                       | Disallow the `.skip` test modifier.                                                                        | ✅    |    | 💡 |\n| [no-skip-without-reason](docs/rules/no-skip-without-reason.md)                                   | Require a reason when skipping or marking a test as todo.                                                  |      |    |    |\n| [no-skip-without-return](docs/rules/no-skip-without-return.md)                                   | Disallow `t.skip()`/`t.todo()` without returning afterwards.                                               | ✅    |    | 💡 |\n| [no-sleep-in-test](docs/rules/no-sleep-in-test.md)                                               | Disallow sleeping in tests with `setTimeout`.                                                              |      |    |    |\n| [no-snapshot-in-loop](docs/rules/no-snapshot-in-loop.md)                                         | Disallow snapshot assertions inside loop bodies.                                                           |      |    |    |\n| [no-standalone-assert](docs/rules/no-standalone-assert.md)                                       | Disallow assertions outside of a test.                                                                     | ✅ ☑️ |    |    |\n| [no-test-global-configuration](docs/rules/no-test-global-configuration.md)                       | Disallow process-wide `node:test` configuration inside tests.                                              | ✅    |    |    |\n| [no-test-inside-hook](docs/rules/no-test-inside-hook.md)                                         | Disallow defining tests and suites inside a hook.                                                          | ✅ ☑️ |    |    |\n| [no-test-return-statement](docs/rules/no-test-return-statement.md)                               | Disallow returning a concrete non-Promise value from a test or hook.                                       | ✅    |    |    |\n| [no-todo-test](docs/rules/no-todo-test.md)                                                       | Disallow the `.todo` test modifier.                                                                        |      |    | 💡 |\n| [no-unawaited-promise-assertion](docs/rules/no-unawaited-promise-assertion.md)                   | Disallow assertions inside unawaited Promise callbacks.                                                    | ✅ ☑️ | 🔧 |    |\n| [no-unawaited-rejects](docs/rules/no-unawaited-rejects.md)                                       | Require `assert.rejects()`/`assert.doesNotReject()` to be awaited or returned.                             | ✅ ☑️ | 🔧 |    |\n| [no-unawaited-subtest](docs/rules/no-unawaited-subtest.md)                                       | Require subtests created with the test context to be awaited or returned.                                  | ✅    | 🔧 |    |\n| [no-unknown-test-options](docs/rules/no-unknown-test-options.md)                                 | Disallow unknown options in test and hook option objects.                                                  | ✅    |    |    |\n| [no-unneeded-async-rejects-callback](docs/rules/no-unneeded-async-rejects-callback.md)           | Disallow unneeded async callbacks passed to `assert.rejects()`.                                            |      |    | 💡 |\n| [no-useless-assertion](docs/rules/no-useless-assertion.md)                                       | Disallow `assert.doesNotThrow()` and `assert.doesNotReject()`.                                             | ✅    |    |    |\n| [prefer-assert-match](docs/rules/prefer-assert-match.md)                                         | Prefer `assert.match()`/`assert.doesNotMatch()` over asserting `RegExp#test()` / `String#match()` results. | ✅ ☑️ | 🔧 |    |\n| [prefer-assert-throws](docs/rules/prefer-assert-throws.md)                                       | Prefer `assert.throws()`/`assert.rejects()` over try/catch with an assertion.                              | ✅    |    |    |\n| [prefer-async-await](docs/rules/prefer-async-await.md)                                           | Prefer async/await over returning a Promise.                                                               | ✅    |    |    |\n| [prefer-context-mock](docs/rules/prefer-context-mock.md)                                         | Prefer the test context `t.mock` over the global `mock`.                                                   | ✅    |    |    |\n| [prefer-diagnostic](docs/rules/prefer-diagnostic.md)                                             | Prefer the test context `diagnostic()` over `console` inside tests.                                        |      |    | 💡 |\n| [prefer-equality-assertion](docs/rules/prefer-equality-assertion.md)                             | Prefer an equality assertion over a truthiness assertion on a comparison.                                  | ✅ ☑️ | 🔧 |    |\n| [prefer-hooks-on-top](docs/rules/prefer-hooks-on-top.md)                                         | Require hooks to be declared before the tests in their scope.                                              | ✅    |    |    |\n| [prefer-lowercase-title](docs/rules/prefer-lowercase-title.md)                                   | Enforce lowercase test titles.                                                                             |      | 🔧 |    |\n| [prefer-mock-accessor](docs/rules/prefer-mock-accessor.md)                                       | Prefer `mock.getter()` and `mock.setter()` over `mock.method()` with accessor options.                     | ✅    | 🔧 |    |\n| [prefer-mock-call-count](docs/rules/prefer-mock-call-count.md)                                   | Prefer `mock.callCount()` over `mock.calls.length`.                                                        | ✅ ☑️ | 🔧 |    |\n| [prefer-mock-method](docs/rules/prefer-mock-method.md)                                           | Prefer `mock.method()` over assigning `mock.fn()` to an object property.                                   | ✅    |    | 💡 |\n| [prefer-strict-assert](docs/rules/prefer-strict-assert.md)                                       | Prefer strict assertion methods over their legacy loose counterparts.                                      | ✅ ☑️ | 🔧 |    |\n| [prefer-test-context-assert](docs/rules/prefer-test-context-assert.md)                           | Prefer the test context `t.assert` over the imported `node:assert`.                                        | ✅    |    | 💡 |\n| [prefer-todo](docs/rules/prefer-todo.md)                                                         | Prefer `.todo` for empty placeholder tests.                                                                | ✅    |    | 💡 |\n| [require-assertion](docs/rules/require-assertion.md)                                             | Require that each test contains at least one assertion.                                                    | ✅    |    |    |\n| [require-await-concurrent-subtests](docs/rules/require-await-concurrent-subtests.md)             | Require subtests created in a loop callback to be awaited.                                                 | ✅ ☑️ |    |    |\n| [require-context-assert-with-plan](docs/rules/require-context-assert-with-plan.md)               | Require assertions to use the test context when the test sets a plan.                                      | ✅ ☑️ |    |    |\n| [require-hook](docs/rules/require-hook.md)                                                       | Require setup and teardown code to be inside a hook.                                                       |      |    |    |\n| [require-mock-timers-advance](docs/rules/require-mock-timers-advance.md)                         | Require mock timers to be advanced after enabling timer APIs.                                              | ✅    |    |    |\n| [require-mock-timers-apis](docs/rules/require-mock-timers-apis.md)                               | Require an explicit `apis` option when enabling `mock.timers`.                                             | ✅ ☑️ |    |    |\n| [require-throws-expectation](docs/rules/require-throws-expectation.md)                           | Require an error matcher for `assert.throws()`/`assert.rejects()`.                                         | ✅ ☑️ |    |    |\n| [require-throws-validator-return-true](docs/rules/require-throws-validator-return-true.md)       | Require validator functions in `assert.throws()`/`assert.rejects()` to return `true`.                      | ✅ ☑️ |    |    |\n| [require-top-level-describe](docs/rules/require-top-level-describe.md)                           | Require tests and hooks to be inside a top-level `describe`.                                               |      |    |    |\n| [test-title](docs/rules/test-title.md)                                                           | Require tests to have a title.                                                                             | ✅    | 🔧 |    |\n| [test-title-format](docs/rules/test-title-format.md)                                             | Require test titles to match a configured pattern.                                                         |      |    |    |\n| [valid-describe-callback](docs/rules/valid-describe-callback.md)                                 | Enforce valid `describe` callbacks.                                                                        | ✅ ☑️ |    |    |\n| [valid-test-tags](docs/rules/valid-test-tags.md)                                                 | Require valid test tags.                                                                                   | ✅ ☑️ | 🔧 |    |\n\n<!-- end auto-generated rules list -->\n\n## Preset configs\n\nThis plugin exports these configs:\n\n- `recommended` — Enables the recommended rules.\n- `unopinionated` — A subset of `recommended` with only the most uncontroversial rules.\n- `all` — Enables every rule (not recommended for general use; useful to discover new rules).\n\n```js\nimport nodeTest from 'eslint-node-test';\nimport {defineConfig} from 'eslint/config';\n\nexport default defineConfig([\n\t{\n\t\tfiles: [\n\t\t\t'**/*.js'\n\t\t],\n\t\tplugins: {\n\t\t\t'node-test': nodeTest\n\t\t},\n\t\textends: [\n\t\t\t'node-test/recommended'\n\t\t]\n\t}\n]);\n```\n\n## Related\n\n- [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) — Lots of awesome ESLint rules.\n- [eslint-package-json](https://github.com/sindresorhus/eslint-package-json) — Powerful ESLint rules for `package.json`.\n- [eslint-plugin-ava](https://github.com/avajs/eslint-plugin-ava) — ESLint rules for AVA.\n- [test-extras](https://github.com/sindresorhus/test-extras) — Assertions and utilities that make `node:test` better.\n","readmeFilename":"readme.md"}