@@ -3,6 +3,8 @@ import test from 'ava';
33import execa from 'execa' ;
44import readPkgUp from 'read-pkg-up' ;
55import tsd , { formatter } from '..' ;
6+ import { verifyCli } from './fixtures/utils' ;
7+ import resolveFrom from 'resolve-from' ;
68
79interface ExecaError extends Error {
810readonly exitCode : number ;
@@ -15,7 +17,11 @@ test('fail if errors are found', async t => {
1517} ) ) ;
1618
1719t . 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+ ] ) ;
1925} ) ;
2026
2127test ( 'succeed if no errors are found' , async t => {
@@ -32,7 +38,11 @@ test('provide a path', async t => {
3238const { exitCode, stderr} = await t . throwsAsync < ExecaError > ( execa ( 'dist/cli.js' , [ file ] ) ) ;
3339
3440t . 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+ ] ) ;
3646} ) ;
3747
3848test ( 'cli help flag' , async t => {
@@ -57,7 +67,11 @@ test('cli typings flag', async t => {
5767} ) ) ;
5868
5969t . 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+ ] ) ;
6175} ;
6276
6377await runTest ( '--typings' ) ;
@@ -71,7 +85,11 @@ test('cli files flag', async t => {
7185} ) ) ;
7286
7387t . 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+ ] ) ;
7593} ;
7694
7795await runTest ( '--files' ) ;
@@ -84,7 +102,11 @@ test('cli files flag array', async t => {
84102} ) ) ;
85103
86104t . 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+ ] ) ;
88110} ) ;
89111
90112test ( 'cli typings and files flags' , async t => {
@@ -94,17 +116,29 @@ test('cli typings and files flags', async t => {
94116const { exitCode, stderr} = t . throws < ExecaError > ( ( ) => execa . commandSync ( `dist/cli.js -t ${ typingsFile } -f ${ testFile } ` ) ) ;
95117
96118t . 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+ ] ) ;
98124} ) ;
99125
100126test ( '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' , {
102128cwd : path . join ( __dirname , 'fixtures/empty-package-json' )
103129} ) ) ;
104130
131+ const nodeModulesPath = path . resolve ( 'node_modules' ) ;
132+ const parseJsonPath = resolveFrom . silent ( `${ nodeModulesPath } /read-pkg` , 'parse-json' ) ?? `${ nodeModulesPath } /index.js` ;
133+
105134t . 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 } ) ;
108142} ) ;
109143
110144test ( 'exported formatter matches cli results' , async t => {
@@ -114,10 +148,18 @@ test('exported formatter matches cli results', async t => {
114148
115149const { stderr : cliResults } = await t . throwsAsync < ExecaError > ( execa ( '../../../cli.js' , options ) ) ;
116150
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+ ] ) ;
118156
119157const tsdResults = await tsd ( options ) ;
120158const formattedResults = formatter ( tsdResults ) ;
121159
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+ ] ) ;
123165} ) ;
0 commit comments