@@ -16,6 +16,9 @@ const makeTempDir = (): string => {
1616 return dir ;
1717} ;
1818
19+ const writeEngines = ( root : string , node : string ) : void =>
20+ writeFileSync ( join ( root , 'package.json' ) , JSON . stringify ( { engines : { node } } ) ) ;
21+
1922describe ( 'findRepoRoot' , ( ) => {
2023 it ( 'finds the ancestor directory containing .git' , ( ) => {
2124 const root = makeTempDir ( ) ;
@@ -35,46 +38,53 @@ describe('findRepoRoot', () => {
3538} ) ;
3639
3740describe ( 'requiredNodeMajorVersion' , ( ) => {
38- it ( 'reads the major version from .nvmrc ' , ( ) => {
41+ it ( 'reads the major version from engines.node in package.json ' , ( ) => {
3942 const root = makeTempDir ( ) ;
40- writeFileSync ( join ( root , '.nvmrc' ) , '22\n ') ;
43+ writeEngines ( root , '22 ' ) ;
4144
4245 expect ( requiredNodeMajorVersion ( root ) ) . toBe ( 22 ) ;
4346 } ) ;
4447
45- it ( 'accepts a leading "v" in .nvmrc ' , ( ) => {
48+ it ( 'accepts a range in engines.node ' , ( ) => {
4649 const root = makeTempDir ( ) ;
47- writeFileSync ( join ( root , '.nvmrc' ) , 'v18 .20.4') ;
50+ writeEngines ( root , '>=18 .20.4' ) ;
4851
4952 expect ( requiredNodeMajorVersion ( root ) ) . toBe ( 18 ) ;
5053 } ) ;
5154
52- it ( 'returns undefined when there is no .nvmrc' , ( ) => {
55+ it ( 'returns undefined when package.json has no engines.node' , ( ) => {
56+ const root = makeTempDir ( ) ;
57+ writeFileSync ( join ( root , 'package.json' ) , '{}' ) ;
58+
59+ expect ( requiredNodeMajorVersion ( root ) ) . toBeUndefined ( ) ;
60+ } ) ;
61+
62+ it ( 'returns undefined when there is no package.json' , ( ) => {
5363 expect ( requiredNodeMajorVersion ( makeTempDir ( ) ) ) . toBeUndefined ( ) ;
5464 } ) ;
5565} ) ;
5666
5767describe ( 'checkNodeVersion' , ( ) => {
5868 const runningMajor = Number ( process . versions . node . split ( '.' ) [ 0 ] ) ;
5969
60- it ( 'passes when the running major version matches .nvmrc ' , ( ) => {
70+ it ( 'passes when the running major version matches engines.node ' , ( ) => {
6171 const root = makeTempDir ( ) ;
62- writeFileSync ( join ( root , '.nvmrc' ) , ` ${ runningMajor } \n` ) ;
72+ writeEngines ( root , String ( runningMajor ) ) ;
6373
6474 const result = checkNodeVersion ( root ) ;
6575
6676 expect ( result . ok ) . toBe ( true ) ;
6777 expect ( result . message ) . toContain ( String ( runningMajor ) ) ;
6878 } ) ;
6979
70- it ( 'fails when the running major version does not match .nvmrc ' , ( ) => {
80+ it ( 'fails when the running major version does not match engines.node ' , ( ) => {
7181 const root = makeTempDir ( ) ;
72- writeFileSync ( join ( root , '.nvmrc' ) , ` ${ runningMajor + 1 } \n` ) ;
82+ writeEngines ( root , String ( runningMajor + 1 ) ) ;
7383
7484 const result = checkNodeVersion ( root ) ;
7585
7686 expect ( result . ok ) . toBe ( false ) ;
77- expect ( result . message ) . toContain ( ' nvm use' ) ;
87+ expect ( result . message ) . toContain ( ` nvm install ${ runningMajor + 1 } ` ) ;
7888 } ) ;
7989
8090 it ( 'fails when the required version cannot be determined' , ( ) => {
0 commit comments