@@ -3,7 +3,10 @@ import * as os from 'os';
3
3
import * as path from 'path' ;
4
4
import { JSONSchemaForNPMPackageJsonFiles } from '@schemastore/package' ;
5
5
import { TSESLint } from '@typescript-eslint/experimental-utils' ;
6
- import rule , { JestVersion } from '../no-deprecated-functions' ;
6
+ import rule , {
7
+ JestVersion ,
8
+ _clearCachedJestVersion ,
9
+ } from '../no-deprecated-functions' ;
7
10
8
11
const ruleTester = new TSESLint . RuleTester ( ) ;
9
12
@@ -89,142 +92,174 @@ const generateInvalidCases = (
89
92
] ;
90
93
} ;
91
94
92
- // a few sanity checks before doing our massive loop
93
- ruleTester . run ( 'no-deprecated-functions' , rule , {
94
- valid : [
95
- 'jest' ,
96
- 'require("fs")' ,
97
- ...generateValidCases ( 14 , 'jest.resetModuleRegistry' ) ,
98
- ...generateValidCases ( 17 , 'require.requireActual' ) ,
99
- ...generateValidCases ( 25 , 'jest.genMockFromModule' ) ,
100
- ] ,
101
- invalid : [
102
- ...generateInvalidCases (
103
- 21 ,
104
- 'jest.resetModuleRegistry' ,
105
- 'jest.resetModules' ,
106
- ) ,
107
- ...generateInvalidCases ( 24 , 'jest.addMatchers' , 'expect.extend' ) ,
108
- ...generateInvalidCases (
109
- 26 ,
110
- 'jest.genMockFromModule' ,
111
- 'jest.createMockFromModule' ,
112
- ) ,
113
- ] ,
114
- } ) ;
95
+ describe ( 'the jest version cache' , ( ) => {
96
+ beforeEach ( async ( ) => process . chdir ( await setupFakeProjectDirectory ( 17 ) ) ) ;
115
97
116
- describe . each < JestVersion > ( [
117
- 14 ,
118
- 15 ,
119
- 16 ,
120
- 17 ,
121
- 18 ,
122
- 19 ,
123
- 20 ,
124
- 21 ,
125
- 22 ,
126
- 23 ,
127
- 24 ,
128
- 25 ,
129
- 26 ,
130
- 27 ,
131
- ] ) ( 'when using jest version %i' , jestVersion => {
132
- beforeEach ( async ( ) =>
133
- process . chdir ( await setupFakeProjectDirectory ( jestVersion ) ) ,
134
- ) ;
98
+ // change the jest version *after* each test case
99
+ afterEach ( async ( ) => {
100
+ const jestPackageJson : JSONSchemaForNPMPackageJsonFiles = {
101
+ name : 'jest' ,
102
+ version : '24.0.0' ,
103
+ } ;
104
+
105
+ const tempDir = process . cwd ( ) ;
135
106
136
- const allowedFunctions : string [ ] = [ ] ;
137
- const deprecations = ( [
138
- [ 15 , 'jest.resetModuleRegistry' , 'jest.resetModules' ] ,
139
- [ 17 , 'jest.addMatchers' , 'expect.extend' ] ,
140
- [ 21 , 'require.requireMock' , 'jest.requireMock' ] ,
141
- [ 21 , 'require.requireActual' , 'jest.requireActual' ] ,
142
- [ 22 , 'jest.runTimersToTime' , 'jest.advanceTimersByTime' ] ,
143
- [ 26 , 'jest.genMockFromModule' , 'jest.createMockFromModule' ] ,
144
- ] as const ) . filter ( deprecation => {
145
- if ( deprecation [ 0 ] > jestVersion ) {
146
- allowedFunctions . push ( deprecation [ 1 ] ) ;
147
-
148
- return false ;
149
- }
150
-
151
- return true ;
107
+ await fs . writeFileSync (
108
+ path . join ( tempDir , 'node_modules' , 'jest' , 'package.json' ) ,
109
+ JSON . stringify ( jestPackageJson ) ,
110
+ ) ;
152
111
} ) ;
153
112
154
- ruleTester . run ( 'explict jest version ' , rule , {
113
+ ruleTester . run ( 'no-deprecated-functions ' , rule , {
155
114
valid : [
156
- 'jest' ,
157
- 'require("fs")' ,
158
- ...allowedFunctions
159
- . map ( func => generateValidCases ( jestVersion , func ) )
160
- . reduce ( ( acc , arr ) => acc . concat ( arr ) , [ ] ) ,
115
+ 'require("fs")' , // this will cause jest version to be read & cached
116
+ 'jest.requireActual()' , // deprecated after jest 17
161
117
] ,
162
- invalid : deprecations
163
- . map ( ( [ , deprecation , replacement ] ) =>
164
- generateInvalidCases ( jestVersion , deprecation , replacement ) ,
165
- )
166
- . reduce ( ( acc , arr ) => acc . concat ( arr ) , [ ] ) ,
118
+ invalid : [ ] ,
167
119
} ) ;
120
+ } ) ;
121
+
122
+ // contains the cache-clearing beforeEach so we can test the cache too
123
+ describe ( 'the rule' , ( ) => {
124
+ beforeEach ( ( ) => _clearCachedJestVersion ( ) ) ;
168
125
169
- ruleTester . run ( 'detected jest version' , rule , {
126
+ // a few sanity checks before doing our massive loop
127
+ ruleTester . run ( 'no-deprecated-functions' , rule , {
170
128
valid : [
171
129
'jest' ,
172
130
'require("fs")' ,
173
- ...allowedFunctions
174
- . map ( func => generateValidCases ( undefined , func ) )
175
- . reduce ( ( acc , arr ) => acc . concat ( arr ) , [ ] ) ,
131
+ ...generateValidCases ( 14 , 'jest.resetModuleRegistry' ) ,
132
+ ...generateValidCases ( 17 , 'require.requireActual' ) ,
133
+ ...generateValidCases ( 25 , 'jest.genMockFromModule' ) ,
134
+ ] ,
135
+ invalid : [
136
+ ...generateInvalidCases (
137
+ 21 ,
138
+ 'jest.resetModuleRegistry' ,
139
+ 'jest.resetModules' ,
140
+ ) ,
141
+ ...generateInvalidCases ( 24 , 'jest.addMatchers' , 'expect.extend' ) ,
142
+ ...generateInvalidCases (
143
+ 26 ,
144
+ 'jest.genMockFromModule' ,
145
+ 'jest.createMockFromModule' ,
146
+ ) ,
176
147
] ,
177
- invalid : deprecations
178
- . map ( ( [ , deprecation , replacement ] ) =>
179
- generateInvalidCases ( undefined , deprecation , replacement ) ,
180
- )
181
- . reduce ( ( acc , arr ) => acc . concat ( arr ) , [ ] ) ,
182
148
} ) ;
183
- } ) ;
184
149
185
- describe ( 'when no jest version is provided' , ( ) => {
186
- describe ( 'when the jest package.json is missing the version property' , ( ) => {
187
- beforeEach ( async ( ) => {
188
- const tempDir = await setupFakeProjectDirectory ( 1 ) ;
150
+ describe . each < JestVersion > ( [
151
+ 14 ,
152
+ 15 ,
153
+ 16 ,
154
+ 17 ,
155
+ 18 ,
156
+ 19 ,
157
+ 20 ,
158
+ 21 ,
159
+ 22 ,
160
+ 23 ,
161
+ 24 ,
162
+ 25 ,
163
+ 26 ,
164
+ 27 ,
165
+ ] ) ( 'when using jest version %i' , jestVersion => {
166
+ beforeEach ( async ( ) =>
167
+ process . chdir ( await setupFakeProjectDirectory ( jestVersion ) ) ,
168
+ ) ;
189
169
190
- await fs . writeFileSync (
191
- path . join ( tempDir , 'node_modules' , 'jest' , 'package.json' ) ,
192
- JSON . stringify ( { } ) ,
193
- ) ;
170
+ const allowedFunctions : string [ ] = [ ] ;
171
+ const deprecations = ( [
172
+ [ 15 , 'jest.resetModuleRegistry' , 'jest.resetModules' ] ,
173
+ [ 17 , 'jest.addMatchers' , 'expect.extend' ] ,
174
+ [ 21 , 'require.requireMock' , 'jest.requireMock' ] ,
175
+ [ 21 , 'require.requireActual' , 'jest.requireActual' ] ,
176
+ [ 22 , 'jest.runTimersToTime' , 'jest.advanceTimersByTime' ] ,
177
+ [ 26 , 'jest.genMockFromModule' , 'jest.createMockFromModule' ] ,
178
+ ] as const ) . filter ( deprecation => {
179
+ if ( deprecation [ 0 ] > jestVersion ) {
180
+ allowedFunctions . push ( deprecation [ 1 ] ) ;
194
181
195
- process . chdir ( tempDir ) ;
196
- } ) ;
182
+ return false ;
183
+ }
197
184
198
- it ( 'requires the version to be set explicitly' , ( ) => {
199
- expect ( ( ) => {
200
- const linter = new TSESLint . Linter ( ) ;
185
+ return true ;
186
+ } ) ;
201
187
202
- linter . defineRule ( 'no-deprecated-functions' , rule ) ;
188
+ ruleTester . run ( 'explict jest version' , rule , {
189
+ valid : [
190
+ 'jest' ,
191
+ 'require("fs")' ,
192
+ ...allowedFunctions
193
+ . map ( func => generateValidCases ( jestVersion , func ) )
194
+ . reduce ( ( acc , arr ) => acc . concat ( arr ) , [ ] ) ,
195
+ ] ,
196
+ invalid : deprecations
197
+ . map ( ( [ , deprecation , replacement ] ) =>
198
+ generateInvalidCases ( jestVersion , deprecation , replacement ) ,
199
+ )
200
+ . reduce ( ( acc , arr ) => acc . concat ( arr ) , [ ] ) ,
201
+ } ) ;
203
202
204
- linter . verify ( 'jest.resetModuleRegistry()' , {
205
- rules : { 'no-deprecated-functions' : 'error' } ,
206
- } ) ;
207
- } ) . toThrow (
208
- 'Unable to detect Jest version - please ensure jest package is installed, or otherwise set version explicitly' ,
209
- ) ;
203
+ ruleTester . run ( 'detected jest version' , rule , {
204
+ valid : [
205
+ 'jest' ,
206
+ 'require("fs")' ,
207
+ ...allowedFunctions
208
+ . map ( func => generateValidCases ( undefined , func ) )
209
+ . reduce ( ( acc , arr ) => acc . concat ( arr ) , [ ] ) ,
210
+ ] ,
211
+ invalid : deprecations
212
+ . map ( ( [ , deprecation , replacement ] ) =>
213
+ generateInvalidCases ( undefined , deprecation , replacement ) ,
214
+ )
215
+ . reduce ( ( acc , arr ) => acc . concat ( arr ) , [ ] ) ,
210
216
} ) ;
211
217
} ) ;
212
218
213
- describe ( 'when the jest package.json is not found' , ( ) => {
214
- beforeEach ( async ( ) => process . chdir ( await makeTempDir ( ) ) ) ;
219
+ describe ( 'when no jest version is provided' , ( ) => {
220
+ describe ( 'when the jest package.json is missing the version property' , ( ) => {
221
+ beforeEach ( async ( ) => {
222
+ const tempDir = await setupFakeProjectDirectory ( 1 ) ;
223
+
224
+ await fs . writeFileSync (
225
+ path . join ( tempDir , 'node_modules' , 'jest' , 'package.json' ) ,
226
+ JSON . stringify ( { } ) ,
227
+ ) ;
228
+
229
+ process . chdir ( tempDir ) ;
230
+ } ) ;
231
+
232
+ it ( 'requires the version to be set explicitly' , ( ) => {
233
+ expect ( ( ) => {
234
+ const linter = new TSESLint . Linter ( ) ;
235
+
236
+ linter . defineRule ( 'no-deprecated-functions' , rule ) ;
237
+
238
+ linter . verify ( 'jest.resetModuleRegistry()' , {
239
+ rules : { 'no-deprecated-functions' : 'error' } ,
240
+ } ) ;
241
+ } ) . toThrow (
242
+ 'Unable to detect Jest version - please ensure jest package is installed, or otherwise set version explicitly' ,
243
+ ) ;
244
+ } ) ;
245
+ } ) ;
246
+
247
+ describe ( 'when the jest package.json is not found' , ( ) => {
248
+ beforeEach ( async ( ) => process . chdir ( await makeTempDir ( ) ) ) ;
215
249
216
- it ( 'requires the version to be set explicitly' , ( ) => {
217
- expect ( ( ) => {
218
- const linter = new TSESLint . Linter ( ) ;
250
+ it ( 'requires the version to be set explicitly' , ( ) => {
251
+ expect ( ( ) => {
252
+ const linter = new TSESLint . Linter ( ) ;
219
253
220
- linter . defineRule ( 'no-deprecated-functions' , rule ) ;
254
+ linter . defineRule ( 'no-deprecated-functions' , rule ) ;
221
255
222
- linter . verify ( 'jest.resetModuleRegistry()' , {
223
- rules : { 'no-deprecated-functions' : 'error' } ,
224
- } ) ;
225
- } ) . toThrow (
226
- 'Unable to detect Jest version - please ensure jest package is installed, or otherwise set version explicitly' ,
227
- ) ;
256
+ linter . verify ( 'jest.resetModuleRegistry()' , {
257
+ rules : { 'no-deprecated-functions' : 'error' } ,
258
+ } ) ;
259
+ } ) . toThrow (
260
+ 'Unable to detect Jest version - please ensure jest package is installed, or otherwise set version explicitly' ,
261
+ ) ;
262
+ } ) ;
228
263
} ) ;
229
264
} ) ;
230
265
} ) ;
0 commit comments