@@ -3,6 +3,8 @@ import test from 'ava';
3
3
import execa from 'execa' ;
4
4
import readPkgUp from 'read-pkg-up' ;
5
5
import tsd , { formatter } from '..' ;
6
+ import { verifyCli } from './fixtures/utils' ;
7
+ import resolveFrom from 'resolve-from' ;
6
8
7
9
interface ExecaError extends Error {
8
10
readonly exitCode : number ;
@@ -15,7 +17,11 @@ test('fail if errors are found', async t => {
15
17
} ) ) ;
16
18
17
19
t . is ( exitCode , 1 ) ;
18
- t . regex ( stderr , / 5 : 1 9 [ ] { 2 } A r g u m e n t o f t y p e n u m b e r i s n o t a s s i g n a b l e t o p a r a m e t e r o f t y p e s t r i n g ./ ) ;
20
+ verifyCli ( t , stderr , [
21
+ '✖ 5:19 Argument of type number is not assignable to parameter of type string.' ,
22
+ '' ,
23
+ '1 error' ,
24
+ ] ) ;
19
25
} ) ;
20
26
21
27
test ( 'succeed if no errors are found' , async t => {
@@ -32,7 +38,11 @@ test('provide a path', async t => {
32
38
const { exitCode, stderr} = await t . throwsAsync < ExecaError > ( execa ( 'dist/cli.js' , [ file ] ) ) ;
33
39
34
40
t . is ( exitCode , 1 ) ;
35
- t . regex ( stderr , / 5 : 1 9 [ ] { 2 } A r g u m e n t o f t y p e n u m b e r i s n o t a s s i g n a b l e t o p a r a m e t e r o f t y p e s t r i n g ./ ) ;
41
+ verifyCli ( t , stderr , [
42
+ '✖ 5:19 Argument of type number is not assignable to parameter of type string.' ,
43
+ '' ,
44
+ '1 error' ,
45
+ ] ) ;
36
46
} ) ;
37
47
38
48
test ( 'cli help flag' , async t => {
@@ -57,7 +67,11 @@ test('cli typings flag', async t => {
57
67
} ) ) ;
58
68
59
69
t . is ( exitCode , 1 ) ;
60
- t . true ( stderr . includes ( '✖ 5:19 Argument of type number is not assignable to parameter of type string.' ) ) ;
70
+ verifyCli ( t , stderr , [
71
+ '✖ 5:19 Argument of type number is not assignable to parameter of type string.' ,
72
+ '' ,
73
+ '1 error' ,
74
+ ] ) ;
61
75
} ;
62
76
63
77
await runTest ( '--typings' ) ;
@@ -71,7 +85,11 @@ test('cli files flag', async t => {
71
85
} ) ) ;
72
86
73
87
t . is ( exitCode , 1 ) ;
74
- t . true ( stderr . includes ( '✖ 5:19 Argument of type number is not assignable to parameter of type string.' ) ) ;
88
+ verifyCli ( t , stderr , [
89
+ '✖ 5:19 Argument of type number is not assignable to parameter of type string.' ,
90
+ '' ,
91
+ '1 error' ,
92
+ ] ) ;
75
93
} ;
76
94
77
95
await runTest ( '--files' ) ;
@@ -84,7 +102,11 @@ test('cli files flag array', async t => {
84
102
} ) ) ;
85
103
86
104
t . is ( exitCode , 1 ) ;
87
- t . true ( stderr . includes ( '✖ 5:19 Argument of type number is not assignable to parameter of type string.' ) ) ;
105
+ verifyCli ( t , stderr , [
106
+ '✖ 5:19 Argument of type number is not assignable to parameter of type string.' ,
107
+ '' ,
108
+ '1 error' ,
109
+ ] ) ;
88
110
} ) ;
89
111
90
112
test ( 'cli typings and files flags' , async t => {
@@ -94,17 +116,29 @@ test('cli typings and files flags', async t => {
94
116
const { exitCode, stderr} = t . throws < ExecaError > ( ( ) => execa . commandSync ( `dist/cli.js -t ${ typingsFile } -f ${ testFile } ` ) ) ;
95
117
96
118
t . is ( exitCode , 1 ) ;
97
- t . true ( stderr . includes ( '✖ 5:19 Argument of type number is not assignable to parameter of type string.' ) ) ;
119
+ verifyCli ( t , stderr , [
120
+ '✖ 5:19 Argument of type number is not assignable to parameter of type string.' ,
121
+ '' ,
122
+ '1 error' ,
123
+ ] ) ;
98
124
} ) ;
99
125
100
126
test ( 'tsd logs stacktrace on failure' , async t => {
101
- const { exitCode, stderr, stack } = await t . throwsAsync < ExecaError > ( execa ( '../../../cli.js' , {
127
+ const { exitCode, stderr} = await t . throwsAsync < ExecaError > ( execa ( '../../../cli.js' , {
102
128
cwd : path . join ( __dirname , 'fixtures/empty-package-json' )
103
129
} ) ) ;
104
130
131
+ const nodeModulesPath = path . resolve ( 'node_modules' ) ;
132
+ const parseJsonPath = resolveFrom . silent ( `${ nodeModulesPath } /read-pkg` , 'parse-json' ) ?? `${ nodeModulesPath } /index.js` ;
133
+
105
134
t . is ( exitCode , 1 ) ;
106
- t . true ( stderr . includes ( 'Error running tsd: JSONError: Unexpected end of JSON input while parsing empty string' ) ) ;
107
- t . truthy ( stack ) ;
135
+ verifyCli ( t , stderr , [
136
+ 'Error running tsd:' ,
137
+ 'JSONError: Unexpected end of JSON input while parsing empty string' ,
138
+ `at parseJson (${ parseJsonPath } :29:21)` ,
139
+ `at module.exports (${ nodeModulesPath } /read-pkg/index.js:17:15)` ,
140
+ `at async module.exports (${ nodeModulesPath } /read-pkg-up/index.js:14:16)` ,
141
+ ] , { startLine : 0 } ) ;
108
142
} ) ;
109
143
110
144
test ( 'exported formatter matches cli results' , async t => {
@@ -114,10 +148,18 @@ test('exported formatter matches cli results', async t => {
114
148
115
149
const { stderr : cliResults } = await t . throwsAsync < ExecaError > ( execa ( '../../../cli.js' , options ) ) ;
116
150
117
- t . true ( cliResults . includes ( '✖ 5:19 Argument of type number is not assignable to parameter of type string.' ) ) ;
151
+ verifyCli ( t , cliResults , [
152
+ '✖ 5:19 Argument of type number is not assignable to parameter of type string.' ,
153
+ '' ,
154
+ '1 error' ,
155
+ ] ) ;
118
156
119
157
const tsdResults = await tsd ( options ) ;
120
158
const formattedResults = formatter ( tsdResults ) ;
121
159
122
- t . true ( formattedResults . includes ( '✖ 5:19 Argument of type number is not assignable to parameter of type string.' ) ) ;
160
+ verifyCli ( t , formattedResults , [
161
+ '✖ 5:19 Argument of type number is not assignable to parameter of type string.' ,
162
+ '' ,
163
+ '1 error' ,
164
+ ] ) ;
123
165
} ) ;
0 commit comments