|
1 | | -import jestPlugin from "eslint-plugin-jest"; |
2 | | - |
3 | | -const recommendedConfig = { |
4 | | - ...jestPlugin.configs["flat/recommended"], |
5 | | - name: "jest/recommended", |
6 | | - settings: { |
7 | | - jest: { |
8 | | - version: 29, |
| 1 | +/** |
| 2 | + * @returns {Promise<Record<string, string>>} config |
| 3 | + */ |
| 4 | +async function getJestRecommendedConfig() { |
| 5 | + let jestPlugin; |
| 6 | + |
| 7 | + try { |
| 8 | + jestPlugin = (await import("eslint-plugin-jest")).default; |
| 9 | + // eslint-disable-next-line unicorn/prefer-optional-catch-binding |
| 10 | + } catch (_err) { |
| 11 | + // Nothing |
| 12 | + } |
| 13 | + |
| 14 | + const jsdocConfig = |
| 15 | + (jestPlugin && jestPlugin.configs["flat/recommended"]) || {}; |
| 16 | + |
| 17 | + return { |
| 18 | + ...jsdocConfig, |
| 19 | + name: "jest/recommended", |
| 20 | + settings: { |
| 21 | + jest: { |
| 22 | + version: 29, |
| 23 | + }, |
9 | 24 | }, |
10 | | - }, |
11 | | - files: [ |
12 | | - "**/{tests,test,__tests__}/**/*.?(c|m)[jt]s?(x)", |
13 | | - "**/?(*.)+(spec|test).[jt]s?(x)", |
14 | | - "**/test-*.[jt]s?(x)", |
15 | | - "setupTest.{js,cjs,mjs,ts,cts,mjs}", |
16 | | - ], |
17 | | - ignores: [ |
18 | | - "**/{tests,test,__tests__}/**/{helper,helpers,__helper__,__helpers__,fixture,fixtures,__fixture__,__fixtures__}/**/*", |
19 | | - "**/helper?(s).{js,cjs,mjs}", |
20 | | - ], |
21 | | - rules: { |
22 | | - ...jestPlugin.configs["flat/recommended"].rules, |
| 25 | + files: [ |
| 26 | + "**/{tests,test,__tests__}/**/*.?(c|m)[jt]s?(x)", |
| 27 | + "**/?(*.)+(spec|test).[jt]s?(x)", |
| 28 | + "**/test-*.[jt]s?(x)", |
| 29 | + "setupTest.{js,cjs,mjs,ts,cts,mjs}", |
| 30 | + ], |
| 31 | + ignores: [ |
| 32 | + "**/{tests,test,__tests__}/**/{helper,helpers,__helper__,__helpers__,fixture,fixtures,__fixture__,__fixtures__}/**/*", |
| 33 | + "**/helper?(s).{js,cjs,mjs}", |
| 34 | + ], |
| 35 | + rules: { |
| 36 | + ...jsdocConfig.rules, |
23 | 37 |
|
24 | | - "jest/consistent-test-it": "error", |
| 38 | + "jest/consistent-test-it": "error", |
25 | 39 |
|
26 | | - "jest/expect-expect": "error", |
| 40 | + "jest/expect-expect": "error", |
27 | 41 |
|
28 | | - // No need |
29 | | - // "jest/max-expects": "error", |
| 42 | + // No need |
| 43 | + // "jest/max-expects": "error", |
30 | 44 |
|
31 | | - // No need |
32 | | - // "jest/max-nested-describe": "error", |
| 45 | + // No need |
| 46 | + // "jest/max-nested-describe": "error", |
33 | 47 |
|
34 | | - // From recommended |
35 | | - // "jest/no-alias-methods": "error", |
| 48 | + // From recommended |
| 49 | + // "jest/no-alias-methods": "error", |
36 | 50 |
|
37 | | - "jest/no-commented-out-tests": "error", |
| 51 | + "jest/no-commented-out-tests": "error", |
38 | 52 |
|
39 | | - // No need |
40 | | - // Makes too much noise, testing conditions can often be different |
41 | | - "jest/no-conditional-expect": "off", |
| 53 | + // No need |
| 54 | + // Makes too much noise, testing conditions can often be different |
| 55 | + "jest/no-conditional-expect": "off", |
42 | 56 |
|
43 | | - // No need |
44 | | - // "jest/no-conditional-in-test": "off", |
| 57 | + // No need |
| 58 | + // "jest/no-conditional-in-test": "off", |
45 | 59 |
|
46 | | - "jest/no-confusing-set-timeout": "error", |
| 60 | + "jest/no-confusing-set-timeout": "error", |
47 | 61 |
|
48 | | - // From recommended |
49 | | - // "jest/no-deprecated-functions": "error", |
| 62 | + // From recommended |
| 63 | + // "jest/no-deprecated-functions": "error", |
50 | 64 |
|
51 | | - "jest/no-disabled-tests": "error", |
| 65 | + "jest/no-disabled-tests": "error", |
52 | 66 |
|
53 | | - // No need |
54 | | - // Adding extra `await new Promise(...)` is very inconvenient when you have a lot of callback api |
55 | | - "jest/no-done-callback": "off", |
| 67 | + // No need |
| 68 | + // Adding extra `await new Promise(...)` is very inconvenient when you have a lot of callback api |
| 69 | + "jest/no-done-callback": "off", |
56 | 70 |
|
57 | | - "jest/no-duplicate-hooks": "error", |
| 71 | + "jest/no-duplicate-hooks": "error", |
58 | 72 |
|
59 | | - // From recommended |
60 | | - // "jest/no-export": "error", |
| 73 | + // From recommended |
| 74 | + // "jest/no-export": "error", |
61 | 75 |
|
62 | | - "jest/no-focused-tests": "error", |
| 76 | + "jest/no-focused-tests": "error", |
63 | 77 |
|
64 | | - // No need |
65 | | - // "jest/no-hooks": "error", |
| 78 | + // No need |
| 79 | + // "jest/no-hooks": "error", |
66 | 80 |
|
67 | | - // From recommended |
68 | | - // "jest/no-identical-title": "error", |
| 81 | + // From recommended |
| 82 | + // "jest/no-identical-title": "error", |
69 | 83 |
|
70 | | - // From recommended |
71 | | - // "jest/no-interpolation-in-snapshots": "error", |
| 84 | + // From recommended |
| 85 | + // "jest/no-interpolation-in-snapshots": "error", |
72 | 86 |
|
73 | | - // From recommended |
74 | | - // "jest/no-jasmine-globals": "error", |
| 87 | + // From recommended |
| 88 | + // "jest/no-jasmine-globals": "error", |
75 | 89 |
|
76 | | - // No need |
77 | | - // "jest/no-large-snapshots": "error", |
| 90 | + // No need |
| 91 | + // "jest/no-large-snapshots": "error", |
78 | 92 |
|
79 | | - // From recommended |
80 | | - // "jest/no-mocks-import": "error", |
| 93 | + // From recommended |
| 94 | + // "jest/no-mocks-import": "error", |
81 | 95 |
|
82 | | - // No need |
83 | | - // "jest/no-restricted-jest-methods": ["error", {}], |
| 96 | + // No need |
| 97 | + // "jest/no-restricted-jest-methods": ["error", {}], |
84 | 98 |
|
85 | | - // No need |
86 | | - // "jest/no-restricted-matchers": ["error", {}], |
| 99 | + // No need |
| 100 | + // "jest/no-restricted-matchers": ["error", {}], |
87 | 101 |
|
88 | | - // From recommended |
89 | | - // "jest/no-standalone-expect": "error", |
| 102 | + // From recommended |
| 103 | + // "jest/no-standalone-expect": "error", |
90 | 104 |
|
91 | | - // From recommended |
92 | | - // "jest/no-test-prefixes": "error", |
| 105 | + // From recommended |
| 106 | + // "jest/no-test-prefixes": "error", |
93 | 107 |
|
94 | | - // No need |
95 | | - // "jest/no-test-return-statement": "error", |
| 108 | + // No need |
| 109 | + // "jest/no-test-return-statement": "error", |
96 | 110 |
|
97 | | - // No need |
98 | | - // "jest/no-untyped-mock-factory": "error", |
| 111 | + // No need |
| 112 | + // "jest/no-untyped-mock-factory": "error", |
99 | 113 |
|
100 | | - "jest/padding-around-after-all-blocks": "error", |
| 114 | + "jest/padding-around-after-all-blocks": "error", |
101 | 115 |
|
102 | | - "jest/padding-around-after-each-blocks": "error", |
| 116 | + "jest/padding-around-after-each-blocks": "error", |
103 | 117 |
|
104 | | - // Not all padding required |
105 | | - // "jest/padding-around-all": "off", |
| 118 | + // Not all padding required |
| 119 | + // "jest/padding-around-all": "off", |
106 | 120 |
|
107 | | - "jest/padding-around-before-all-blocks": "error", |
| 121 | + "jest/padding-around-before-all-blocks": "error", |
108 | 122 |
|
109 | | - "jest/padding-around-before-each-blocks": "error", |
| 123 | + "jest/padding-around-before-each-blocks": "error", |
110 | 124 |
|
111 | | - "jest/padding-around-describe-blocks": "error", |
| 125 | + "jest/padding-around-describe-blocks": "error", |
112 | 126 |
|
113 | | - "jest/padding-around-expect-groups": "off", |
| 127 | + "jest/padding-around-expect-groups": "off", |
114 | 128 |
|
115 | | - "jest/padding-around-test-blocks": "error", |
| 129 | + "jest/padding-around-test-blocks": "error", |
116 | 130 |
|
117 | | - // No need |
118 | | - // "jest/prefer-called-with": "error", |
| 131 | + // No need |
| 132 | + // "jest/prefer-called-with": "error", |
119 | 133 |
|
120 | | - "jest/prefer-comparison-matcher": "error", |
| 134 | + "jest/prefer-comparison-matcher": "error", |
121 | 135 |
|
122 | | - // No need |
123 | | - // "jest/prefer-each": "error", |
| 136 | + // No need |
| 137 | + // "jest/prefer-each": "error", |
124 | 138 |
|
125 | | - "jest/prefer-equality-matcher": "error", |
| 139 | + "jest/prefer-equality-matcher": "error", |
126 | 140 |
|
127 | | - // No need |
128 | | - // "jest/prefer-expect-assertions": "error", |
| 141 | + // No need |
| 142 | + // "jest/prefer-expect-assertions": "error", |
129 | 143 |
|
130 | | - // No need |
131 | | - // "jest/prefer-expect-resolves": "error", |
| 144 | + // No need |
| 145 | + // "jest/prefer-expect-resolves": "error", |
132 | 146 |
|
133 | | - "jest/prefer-hooks-in-order": "error", |
| 147 | + "jest/prefer-hooks-in-order": "error", |
134 | 148 |
|
135 | | - "jest/prefer-hooks-on-top": "error", |
| 149 | + "jest/prefer-hooks-on-top": "error", |
136 | 150 |
|
137 | | - // No need |
138 | | - // "jest/prefer-importing-jest-globals": "error", |
| 151 | + // No need |
| 152 | + // "jest/prefer-importing-jest-globals": "error", |
139 | 153 |
|
140 | | - "jest/prefer-jest-mocked": "error", |
| 154 | + "jest/prefer-jest-mocked": "error", |
141 | 155 |
|
142 | | - // Allow to use `MyClass` title in describe for class testing |
143 | | - "jest/prefer-lowercase-title": ["error", { ignore: ["describe"] }], |
| 156 | + // Allow to use `MyClass` title in describe for class testing |
| 157 | + "jest/prefer-lowercase-title": ["error", { ignore: ["describe"] }], |
144 | 158 |
|
145 | | - "jest/prefer-mock-promise-shorthand": "error", |
| 159 | + "jest/prefer-mock-promise-shorthand": "error", |
146 | 160 |
|
147 | | - // No need |
148 | | - // "jest/prefer-snapshot-hint": "error", |
| 161 | + // No need |
| 162 | + // "jest/prefer-snapshot-hint": "error", |
149 | 163 |
|
150 | | - "jest/prefer-spy-on": "error", |
| 164 | + "jest/prefer-spy-on": "error", |
151 | 165 |
|
152 | | - // No need |
153 | | - // "jest/prefer-strict-equal": "off", |
| 166 | + // No need |
| 167 | + // "jest/prefer-strict-equal": "off", |
154 | 168 |
|
155 | | - "jest/prefer-to-be": "error", |
| 169 | + "jest/prefer-to-be": "error", |
156 | 170 |
|
157 | | - "jest/prefer-to-contain": "error", |
| 171 | + "jest/prefer-to-contain": "error", |
158 | 172 |
|
159 | | - "jest/prefer-to-have-length": "error", |
| 173 | + "jest/prefer-to-have-length": "error", |
160 | 174 |
|
161 | | - // No need |
162 | | - // "jest/prefer-todo": "error" |
| 175 | + // No need |
| 176 | + // "jest/prefer-todo": "error" |
163 | 177 |
|
164 | | - // No need |
165 | | - // Does not allow using the function as test generation |
166 | | - "jest/require-hook": "off", |
| 178 | + // No need |
| 179 | + // Does not allow using the function as test generation |
| 180 | + "jest/require-hook": "off", |
167 | 181 |
|
168 | | - "jest/require-to-throw-message": "error", |
| 182 | + "jest/require-to-throw-message": "error", |
169 | 183 |
|
170 | | - "jest/require-top-level-describe": "error", |
| 184 | + "jest/require-top-level-describe": "error", |
171 | 185 |
|
172 | | - // From recommended |
173 | | - // "jest/valid-describe-callback": "error", |
| 186 | + // From recommended |
| 187 | + // "jest/valid-describe-callback": "error", |
174 | 188 |
|
175 | | - // From recommended |
176 | | - // "jest/valid-expect": "error", |
| 189 | + // From recommended |
| 190 | + // "jest/valid-expect": "error", |
177 | 191 |
|
178 | | - // From recommended |
179 | | - // "jest/valid-expect-in-promise": "error", |
| 192 | + // From recommended |
| 193 | + // "jest/valid-expect-in-promise": "error", |
180 | 194 |
|
181 | | - // From recommended |
182 | | - "jest/valid-title": [ |
183 | | - "error", |
184 | | - { |
185 | | - // Allow to use variables in tests |
186 | | - ignoreTypeOfDescribeName: true, |
187 | | - // Allow to use variables in tests |
188 | | - ignoreTypeOfTestName: true, |
189 | | - }, |
190 | | - ], |
| 195 | + // From recommended |
| 196 | + "jest/valid-title": [ |
| 197 | + "error", |
| 198 | + { |
| 199 | + // Allow to use variables in tests |
| 200 | + ignoreTypeOfDescribeName: true, |
| 201 | + // Allow to use variables in tests |
| 202 | + ignoreTypeOfTestName: true, |
| 203 | + }, |
| 204 | + ], |
191 | 205 |
|
192 | | - // Disable it for tests, because often you can use `a`, `b`, `c` and etc variables |
193 | | - "id-length": "off", |
| 206 | + // Disable it for tests, because often you can use `a`, `b`, `c` and etc variables |
| 207 | + "id-length": "off", |
194 | 208 |
|
195 | | - // In tests, we can have any names |
196 | | - camelcase: "off", |
| 209 | + // In tests, we can have any names |
| 210 | + camelcase: "off", |
197 | 211 |
|
198 | | - // Doesn't require jsdoc for tests, they are either redundant or we have a separate task for checking types of tests |
199 | | - "jsdoc/require-jsdoc": "off", |
200 | | - }, |
201 | | -}; |
| 212 | + // Doesn't require jsdoc for tests, they are either redundant or we have a separate task for checking types of tests |
| 213 | + "jsdoc/require-jsdoc": "off", |
| 214 | + }, |
| 215 | + }; |
| 216 | +} |
202 | 217 |
|
203 | 218 | export default { |
204 | | - "jest/recommended": recommendedConfig, |
| 219 | + "jest/recommended": await getJestRecommendedConfig(), |
205 | 220 | }; |
0 commit comments