Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jest-community/eslint-plugin-jest
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v27.2.0
Choose a base ref
...
head repository: jest-community/eslint-plugin-jest
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v27.2.1
Choose a head ref
  • 7 commits
  • 9 files changed
  • 4 contributors

Commits on Jan 1, 2023

  1. Copy the full SHA
    6a287c0 View commit details

Commits on Jan 2, 2023

  1. chore(deps): update dependency eslint-remote-tester-repositories to v1 (

    #1319)
    
    Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
    renovate[bot] authored Jan 2, 2023
    Copy the full SHA
    3718e82 View commit details

Commits on Jan 3, 2023

  1. Copy the full SHA
    f3cb13b View commit details

Commits on Jan 6, 2023

  1. chore(deps): update danger/danger-js action to v11.2.1 (#1321)

    Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
    renovate[bot] authored Jan 6, 2023
    Copy the full SHA
    d566516 View commit details
  2. Copy the full SHA
    35b0e6f View commit details
  3. Copy the full SHA
    21e72c9 View commit details
  4. chore(release): 27.2.1 [skip ci]

    ## [27.2.1](v27.2.0...v27.2.1) (2023-01-06)
    
    ### Bug Fixes
    
    * **valid-expect-in-promise:** handle sparse arrays ([#1325](#1325)) ([21e72c9](21e72c9))
    semantic-release-bot committed Jan 6, 2023
    Copy the full SHA
    6f4f84c View commit details
Showing with 100 additions and 91 deletions.
  1. +1 −1 .github/workflows/lint.yml
  2. +8 −1 CHANGELOG.md
  3. +1 −1 docs/rules/no-if.md
  4. +2 −2 package.json
  5. +19 −28 src/index.ts
  6. +11 −0 src/rules/__tests__/valid-expect-in-promise.test.ts
  7. +1 −1 src/rules/prefer-spy-on.ts
  8. +3 −3 src/rules/valid-expect-in-promise.ts
  9. +54 −54 yarn.lock
2 changes: 1 addition & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -28,6 +28,6 @@ jobs:
with:
persist-credentials: false
- name: Danger
uses: danger/danger-js@11.2.0
uses: danger/danger-js@11.2.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
9 changes: 8 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
## [27.2.1](https://github.com/jest-community/eslint-plugin-jest/compare/v27.2.0...v27.2.1) (2023-01-06)


### Bug Fixes

* **valid-expect-in-promise:** handle sparse arrays ([#1325](https://github.com/jest-community/eslint-plugin-jest/issues/1325)) ([21e72c9](https://github.com/jest-community/eslint-plugin-jest/commit/21e72c9d94ed66c1006212e5da78bac8b62fa8c7))

# [27.2.0](https://github.com/jest-community/eslint-plugin-jest/compare/v27.1.7...v27.2.0) (2022-12-31)


### Features

* create `require-typed-module-mocks` rule ([#1314](https://github.com/jest-community/eslint-plugin-jest/issues/1314)) ([ee43c3f](https://github.com/jest-community/eslint-plugin-jest/commit/ee43c3f4d5de5e6935d0242cc846f1dec43af20d))
* create `no-untyped-mock-factory` rule ([#1314](https://github.com/jest-community/eslint-plugin-jest/issues/1314)) ([ee43c3f](https://github.com/jest-community/eslint-plugin-jest/commit/ee43c3f4d5de5e6935d0242cc846f1dec43af20d))

## [27.1.7](https://github.com/jest-community/eslint-plugin-jest/compare/v27.1.6...v27.1.7) (2022-12-15)

2 changes: 1 addition & 1 deletion docs/rules/no-if.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Disallow conditional logic (`no-if`)

❌ This rule is deprecated. It was replaced by
[`jest/no-conditional-in-test`](../../docs/rules/no-conditional-in-test.md).
[`jest/no-conditional-in-test`](no-conditional-in-test.md).

<!-- end auto-generated rule header -->

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "eslint-plugin-jest",
"version": "27.2.0",
"version": "27.2.1",
"description": "ESLint rules for Jest",
"keywords": [
"eslint",
@@ -128,7 +128,7 @@
"eslint-plugin-node": "^11.0.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-remote-tester": "^3.0.0",
"eslint-remote-tester-repositories": "~0.0.5",
"eslint-remote-tester-repositories": "~1.0.0",
"husky": "^8.0.1",
"is-ci": "^3.0.0",
"jest": "^29.0.0",
47 changes: 19 additions & 28 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -27,36 +27,27 @@ const importDefault = (moduleName: string) =>
const rulesDir = join(__dirname, 'rules');
const excludedFiles = ['__tests__', 'detectJestVersion', 'utils'];

const rules = readdirSync(rulesDir)
.map(rule => parse(rule).name)
.filter(rule => !excludedFiles.includes(rule))
.reduce<Record<string, RuleModule>>(
(acc, curr) => ({
...acc,
[curr]: importDefault(join(rulesDir, curr)) as RuleModule,
}),
{},
);
const rules = Object.fromEntries(
readdirSync(rulesDir)
.map(rule => parse(rule).name)
.filter(rule => !excludedFiles.includes(rule))
.map(rule => [rule, importDefault(join(rulesDir, rule)) as RuleModule]),
);

const recommendedRules = Object.entries(rules)
.filter(([, rule]) => rule.meta.docs.recommended)
.reduce(
(acc, [name, rule]) => ({
...acc,
[`jest/${name}`]: rule.meta.docs.recommended,
}),
{},
);
const recommendedRules = Object.fromEntries(
Object.entries(rules)
.filter(([, rule]) => rule.meta.docs.recommended)
.map(([name, rule]) => [
`jest/${name}`,
rule.meta.docs.recommended as TSESLint.Linter.RuleLevel,
]),
);

const allRules = Object.entries(rules)
.filter(([, rule]) => !rule.meta.deprecated)
.reduce(
(acc, [name]) => ({
...acc,
[`jest/${name}`]: 'error',
}),
{},
);
const allRules = Object.fromEntries<TSESLint.Linter.RuleLevel>(
Object.entries(rules)
.filter(([, rule]) => !rule.meta.deprecated)
.map(([name]) => [`jest/${name}`, 'error']),
);

const createConfig = (rules: Record<string, TSESLint.Linter.RuleLevel>) => ({
plugins: ['jest'],
11 changes: 11 additions & 0 deletions src/rules/__tests__/valid-expect-in-promise.test.ts
Original file line number Diff line number Diff line change
@@ -131,6 +131,17 @@ ruleTester.run('valid-expect-in-promise', rule, {
return number + 1;
});
expect([,,await promise,,]).toHaveLength(1);
});
`,
dedent`
it('is valid', async () => {
const promise = loadNumber().then(number => {
expect(typeof number).toBe('number');
return number + 1;
});
expect([[await promise]]).toHaveLength(1);
});
`,
2 changes: 1 addition & 1 deletion src/rules/prefer-spy-on.ts
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@ import { createRule, getNodeName } from './utils';

const findNodeObject = (
node: TSESTree.CallExpression | TSESTree.MemberExpression,
): TSESTree.LeftHandSideExpression | null => {
): TSESTree.Expression | null => {
if ('object' in node) {
return node.object;
}
6 changes: 3 additions & 3 deletions src/rules/valid-expect-in-promise.ts
Original file line number Diff line number Diff line change
@@ -99,7 +99,7 @@ const isPromiseMethodThatUsesValue = (

if (
firstArg.type === AST_NODE_TYPES.ArrayExpression &&
firstArg.elements.some(nod => isIdentifier(nod, name))
firstArg.elements.some(nod => nod && isIdentifier(nod, name))
) {
return true;
}
@@ -128,14 +128,14 @@ const isValueAwaitedInElements = (
): boolean => {
for (const element of elements) {
if (
element.type === AST_NODE_TYPES.AwaitExpression &&
element?.type === AST_NODE_TYPES.AwaitExpression &&
isIdentifier(element.argument, name)
) {
return true;
}

if (
element.type === AST_NODE_TYPES.ArrayExpression &&
element?.type === AST_NODE_TYPES.ArrayExpression &&
isValueAwaitedInElements(name, element.elements)
) {
return true;
108 changes: 54 additions & 54 deletions yarn.lock
Original file line number Diff line number Diff line change
@@ -2730,12 +2730,12 @@ __metadata:
linkType: hard

"@typescript-eslint/eslint-plugin@npm:^5.0.0":
version: 5.47.0
resolution: "@typescript-eslint/eslint-plugin@npm:5.47.0"
version: 5.48.0
resolution: "@typescript-eslint/eslint-plugin@npm:5.48.0"
dependencies:
"@typescript-eslint/scope-manager": 5.47.0
"@typescript-eslint/type-utils": 5.47.0
"@typescript-eslint/utils": 5.47.0
"@typescript-eslint/scope-manager": 5.48.0
"@typescript-eslint/type-utils": 5.48.0
"@typescript-eslint/utils": 5.48.0
debug: ^4.3.4
ignore: ^5.2.0
natural-compare-lite: ^1.4.0
@@ -2748,67 +2748,67 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
checksum: fd867eb2b668d1f476fd28d38c2df2a680bf510a265a6e714b28d8f77e7a37e74e32294b70262a6fd1aec99ddb2fddef0212c862b4465ca4f83bb1172476f6e7
checksum: cb9cd62fd56670414795e30d30c9fa11ec7ad3a8b0abda48dd17625053a1c26ba1767184b096149bdd0ccb457bec6392306f22211b75f802f4b27366398d16eb
languageName: node
linkType: hard

"@typescript-eslint/parser@npm:^5.0.0":
version: 5.47.0
resolution: "@typescript-eslint/parser@npm:5.47.0"
version: 5.48.0
resolution: "@typescript-eslint/parser@npm:5.48.0"
dependencies:
"@typescript-eslint/scope-manager": 5.47.0
"@typescript-eslint/types": 5.47.0
"@typescript-eslint/typescript-estree": 5.47.0
"@typescript-eslint/scope-manager": 5.48.0
"@typescript-eslint/types": 5.48.0
"@typescript-eslint/typescript-estree": 5.48.0
debug: ^4.3.4
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
typescript:
optional: true
checksum: 5c864ca74b86ca740c73e5b87d90d43bb832b20ba6be0a39089175435771527722a7bf0a8ef7ddbd64b85235fbb7f6dbe8ae55a8bc73c6242f5559d580a8a80c
checksum: 41d5ce5c8742d286fb083523295a4f186e57bbe4e3da63b6b2de1edbafbcbf6d5225ed3405da2c56e2b0fe1d52bb72babc37508d2ee9b86f6fadad3c4a7950d0
languageName: node
linkType: hard

"@typescript-eslint/scope-manager@npm:5.47.0":
version: 5.47.0
resolution: "@typescript-eslint/scope-manager@npm:5.47.0"
"@typescript-eslint/scope-manager@npm:5.48.0":
version: 5.48.0
resolution: "@typescript-eslint/scope-manager@npm:5.48.0"
dependencies:
"@typescript-eslint/types": 5.47.0
"@typescript-eslint/visitor-keys": 5.47.0
checksum: f637268a4cb065a89bb53d72620cc553f8c0d9f00805d6e6aac558cc4d3c08f3329208b0b4d5566d21eb636b080d453e5890221baef0e4bc4d67251f07cccd0d
"@typescript-eslint/types": 5.48.0
"@typescript-eslint/visitor-keys": 5.48.0
checksum: 96c0ce33d613490690ae6f34e4152f05dbddf3196a6dec89afba4a63cd2d828ae23a98262920b521fe461e7655d38f3a01e9e43588c12392a27bf8cb4f8ae201
languageName: node
linkType: hard

"@typescript-eslint/type-utils@npm:5.47.0":
version: 5.47.0
resolution: "@typescript-eslint/type-utils@npm:5.47.0"
"@typescript-eslint/type-utils@npm:5.48.0":
version: 5.48.0
resolution: "@typescript-eslint/type-utils@npm:5.48.0"
dependencies:
"@typescript-eslint/typescript-estree": 5.47.0
"@typescript-eslint/utils": 5.47.0
"@typescript-eslint/typescript-estree": 5.48.0
"@typescript-eslint/utils": 5.48.0
debug: ^4.3.4
tsutils: ^3.21.0
peerDependencies:
eslint: "*"
peerDependenciesMeta:
typescript:
optional: true
checksum: 504b3e883ac02cb8e69957b706e76cb79fa2192aa62702c2a658119f28f8f50f1e668efb62318e85aeda6522e1d948b59382cae4ef3300a3f4eea809a87dec26
checksum: 0d57e3bbcaa46e29b588b86b2271341b264f063e71ff5b6d4d35f50f2fe11bd6cdc3c4c95d78493fd17673ecdbd712992b84da1600947ed3bf6ae09de7b99464
languageName: node
linkType: hard

"@typescript-eslint/types@npm:5.47.0":
version: 5.47.0
resolution: "@typescript-eslint/types@npm:5.47.0"
checksum: 5a856e190cc2103427dbe15ccbbf87238261b5ed0859390a9e55f93afc2057f79dcbb4ac0db4d35787466f5e73f271111d19b2e725cf444af41d30e09678bf7a
"@typescript-eslint/types@npm:5.48.0":
version: 5.48.0
resolution: "@typescript-eslint/types@npm:5.48.0"
checksum: fa27bd9ec7ec5f256b79a371bb05cfbc26902b6a395f38b0cff0e281633ebd76775ad18e41be1bb156868859287295f6833a2a671da57c6347ac7c6bc08a553b
languageName: node
linkType: hard

"@typescript-eslint/typescript-estree@npm:5.47.0":
version: 5.47.0
resolution: "@typescript-eslint/typescript-estree@npm:5.47.0"
"@typescript-eslint/typescript-estree@npm:5.48.0":
version: 5.48.0
resolution: "@typescript-eslint/typescript-estree@npm:5.48.0"
dependencies:
"@typescript-eslint/types": 5.47.0
"@typescript-eslint/visitor-keys": 5.47.0
"@typescript-eslint/types": 5.48.0
"@typescript-eslint/visitor-keys": 5.48.0
debug: ^4.3.4
globby: ^11.1.0
is-glob: ^4.0.3
@@ -2817,35 +2817,35 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
checksum: a9adfe8955b7dc9dfa9f43d450b782b83f506eaadae2a13f4e1bbe6c733be446d3edb26910954aec1bdc60d94ecc55c4e200d5b19bb24e6742f02329a4fb3e8c
checksum: 2444632243111e51bc83b56140514cb5978bef4d7151fede0dfcff8808afc1ad335b0c60ca86c2811bcc82273b87e59e2e0360bf1b8c014825ff818a1731d127
languageName: node
linkType: hard

"@typescript-eslint/utils@npm:5.47.0, @typescript-eslint/utils@npm:^5.10.0, @typescript-eslint/utils@npm:^5.38.1":
version: 5.47.0
resolution: "@typescript-eslint/utils@npm:5.47.0"
"@typescript-eslint/utils@npm:5.48.0, @typescript-eslint/utils@npm:^5.10.0, @typescript-eslint/utils@npm:^5.38.1":
version: 5.48.0
resolution: "@typescript-eslint/utils@npm:5.48.0"
dependencies:
"@types/json-schema": ^7.0.9
"@types/semver": ^7.3.12
"@typescript-eslint/scope-manager": 5.47.0
"@typescript-eslint/types": 5.47.0
"@typescript-eslint/typescript-estree": 5.47.0
"@typescript-eslint/scope-manager": 5.48.0
"@typescript-eslint/types": 5.48.0
"@typescript-eslint/typescript-estree": 5.48.0
eslint-scope: ^5.1.1
eslint-utils: ^3.0.0
semver: ^7.3.7
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
checksum: f168920eec6f77651107f190b4ecadd82951fe4e3c0321ff660ac7380f4315d5ae30a1b63b4d2818f5e6f007a3f34c5df202619c24ec3a7e2ef25b215ec7b813
checksum: 53f512ae61f72c2b29f2daf8adbc1f37c400cc71156557f69f0745b62c1265d99917a168245e2ee3d88ae458144818d1bf41ced4a764d7d9534b466b29d362fd
languageName: node
linkType: hard

"@typescript-eslint/visitor-keys@npm:5.47.0":
version: 5.47.0
resolution: "@typescript-eslint/visitor-keys@npm:5.47.0"
"@typescript-eslint/visitor-keys@npm:5.48.0":
version: 5.48.0
resolution: "@typescript-eslint/visitor-keys@npm:5.48.0"
dependencies:
"@typescript-eslint/types": 5.47.0
"@typescript-eslint/types": 5.48.0
eslint-visitor-keys: ^3.3.0
checksum: 2191c079154bdfd1b85b8cd24baa6c0f55c73527c6c8460789483555b4eb5c72e3dc6d1aa4bbac2cf7b86b474588b45682a8deb151e9d903cf72c8f336141f1f
checksum: 8d41fb7c93b79df415b43c31da7c9007074d78ab6f16c2d318c23e7974b578ce510f466a9584bd67c526367666974091cb5cfbf6670d29e36fb4ab2e57137515
languageName: node
linkType: hard

@@ -4532,8 +4532,8 @@ __metadata:
linkType: hard

"eslint-doc-generator@npm:^1.0.0":
version: 1.3.0
resolution: "eslint-doc-generator@npm:1.3.0"
version: 1.4.1
resolution: "eslint-doc-generator@npm:1.4.1"
dependencies:
"@typescript-eslint/utils": ^5.38.1
ajv: ^8.11.2
@@ -4551,7 +4551,7 @@ __metadata:
eslint: ">= 7"
bin:
eslint-doc-generator: dist/bin/eslint-doc-generator.js
checksum: ba3701d90a42f0803aab773ca67719a78da20f0b812bd14bcae75aa6c7af4733e901a4e9a8414f3e3b976d145e1d24fd72b5ff0cd7ded3169ff70066a6e7c8f9
checksum: cabf0f50271896e7c33a41d92ad79265a4499eee0134f31bafa90d9a4e7d4bfaea1f254a16730b4006fd49370eecfc1722d360d3fd0577b255b71605db0209a9
languageName: node
linkType: hard

@@ -4670,7 +4670,7 @@ __metadata:
eslint-plugin-node: ^11.0.0
eslint-plugin-prettier: ^4.2.1
eslint-remote-tester: ^3.0.0
eslint-remote-tester-repositories: ~0.0.5
eslint-remote-tester-repositories: ~1.0.0
husky: ^8.0.1
is-ci: ^3.0.0
jest: ^29.0.0
@@ -4726,10 +4726,10 @@ __metadata:
languageName: node
linkType: hard

"eslint-remote-tester-repositories@npm:~0.0.5":
version: 0.0.8
resolution: "eslint-remote-tester-repositories@npm:0.0.8"
checksum: 6379bcee4a7e9b305b2b6eb73b73b93c9ac7aa5a22d6edb8e37ada65d6d83417e50eaf1c4446f8c114bdaf4de9cadc7de5a22f9bb50fbc4c4476171fe1161380
"eslint-remote-tester-repositories@npm:~1.0.0":
version: 1.0.0
resolution: "eslint-remote-tester-repositories@npm:1.0.0"
checksum: 60b497fd056dfa5e3c0a972ea08b4c5c59e9c31d6b9916330358de94f1d6d75d94f67a253ef74a3d9c46fe941cb610e5f48ac3dda459b3e74b0e9f01c8ae86c6
languageName: node
linkType: hard