|
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