1
1
import { TSESLint } from '@typescript-eslint/experimental-utils' ;
2
2
import resolveFrom from 'resolve-from' ;
3
- import { createRule , isDescribeCall , isTestCaseCall } from '../utils' ;
3
+ import {
4
+ createRule ,
5
+ getNodeName ,
6
+ isDescribeCall ,
7
+ isTestCaseCall ,
8
+ } from '../utils' ;
4
9
5
10
const ruleTester = new TSESLint . RuleTester ( {
6
11
parser : resolveFrom ( require . resolve ( 'eslint' ) , 'espree' ) ,
@@ -21,6 +26,7 @@ const rule = createRule({
21
26
details : [
22
27
'callType' , //
23
28
'numOfArgs' ,
29
+ 'nodeName' ,
24
30
]
25
31
. map ( data => `${ data } : {{ ${ data } }}` )
26
32
. join ( '\n' ) ,
@@ -42,13 +48,32 @@ const rule = createRule({
42
48
data : {
43
49
callType,
44
50
numOfArgs : node . arguments . length ,
51
+ nodeName : getNodeName ( node ) ,
45
52
} ,
46
53
} ) ;
47
54
}
48
55
} ,
49
56
} ) ,
50
57
} ) ;
51
58
59
+ /**
60
+ * Determines what the expected "node name" should be for the given code by normalizing
61
+ * the line of code to be using dot property accessors and then applying regexp.
62
+ *
63
+ * @param {string } code
64
+ *
65
+ * @return {string }
66
+ */
67
+ const expectedNodeName = ( code : string ) : string => {
68
+ const normalizedCode = code
69
+ . replace ( / \[ [ " ' ] / gu, '.' ) //
70
+ . replace ( / [ " ' ] \] / gu, '' ) ;
71
+
72
+ const [ expectedName ] = / ^ [ \w . ] + / u. exec ( normalizedCode ) ?? [ 'NAME NOT FOUND' ] ;
73
+
74
+ return expectedName ;
75
+ } ;
76
+
52
77
ruleTester . run ( 'nonexistent methods' , rule , {
53
78
valid : [
54
79
'describe.something()' ,
@@ -93,6 +118,7 @@ const testUtilsAgainst = (
93
118
data : {
94
119
callType,
95
120
numOfArgs : 2 ,
121
+ nodeName : expectedNodeName ( code ) ,
96
122
} ,
97
123
column : 1 ,
98
124
line : 1 ,
0 commit comments