@@ -10,30 +10,53 @@ const validEnvFilePath = '../fixtures/dotenv/valid.env';
10
10
const nodeOptionsEnvFilePath = '../fixtures/dotenv/node-options.env' ;
11
11
12
12
describe ( '.env supports edge cases' , ( ) => {
13
-
14
- it ( 'supports multiple declarations' , async ( ) => {
15
- // process.env.BASIC is equal to `basic` because the second .env file overrides it.
13
+ it ( 'supports multiple declarations, including optional ones' , async ( ) => {
16
14
const code = `
17
15
const assert = require('assert');
18
16
assert.strictEqual(process.env.BASIC, 'basic');
19
17
assert.strictEqual(process.env.NODE_NO_WARNINGS, '1');
20
18
` . trim ( ) ;
19
+ const children = await Promise . all ( Array . from ( { length : 4 } , ( _ , i ) =>
20
+ common . spawnPromisified (
21
+ process . execPath ,
22
+ [
23
+ // Bitwise AND to create all 4 possible combinations:
24
+ // i & 0b01 is truthy when i has value 0bx1 (i.e. 0b01 (1) and 0b11 (3)), falsy otherwise.
25
+ // i & 0b10 is truthy when i has value 0b1x (i.e. 0b10 (2) and 0b11 (3)), falsy otherwise.
26
+ `${ i & 0b01 ? '--env-file' : '--env-file-if-exists' } =${ nodeOptionsEnvFilePath } ` ,
27
+ `${ i & 0b10 ? '--env-file' : '--env-file-if-exists' } =${ validEnvFilePath } ` ,
28
+ '--eval' , code ,
29
+ ] ,
30
+ { cwd : __dirname } ,
31
+ ) ) ) ;
32
+ assert . deepStrictEqual ( children , Array . from ( { length : 4 } , ( ) => ( {
33
+ code : 0 ,
34
+ signal : null ,
35
+ stdout : '' ,
36
+ stderr : '' ,
37
+ } ) ) ) ;
38
+ } ) ;
39
+
40
+ it ( 'supports absolute paths' , async ( ) => {
41
+ const code = `
42
+ require('assert').strictEqual(process.env.BASIC, 'basic');
43
+ ` . trim ( ) ;
21
44
const child = await common . spawnPromisified (
22
45
process . execPath ,
23
- [ `--env-file=${ nodeOptionsEnvFilePath } ` , `--env-file=${ validEnvFilePath } ` , '--eval' , code ] ,
24
- { cwd : __dirname } ,
46
+ [ `--env-file=${ path . resolve ( __dirname , validEnvFilePath ) } ` , '--eval' , code ] ,
25
47
) ;
26
48
assert . strictEqual ( child . stderr , '' ) ;
27
49
assert . strictEqual ( child . code , 0 ) ;
28
50
} ) ;
29
51
30
- it ( 'supports absolute paths ' , async ( ) => {
52
+ it ( 'supports a space instead of \'=\' for the flag ' , async ( ) => {
31
53
const code = `
32
54
require('assert').strictEqual(process.env.BASIC, 'basic');
33
55
` . trim ( ) ;
34
56
const child = await common . spawnPromisified (
35
57
process . execPath ,
36
- [ `--env-file=${ path . resolve ( __dirname , validEnvFilePath ) } ` , '--eval' , code ] ,
58
+ [ '--env-file' , validEnvFilePath , '--eval' , code ] ,
59
+ { cwd : __dirname } ,
37
60
) ;
38
61
assert . strictEqual ( child . stderr , '' ) ;
39
62
assert . strictEqual ( child . code , 0 ) ;
@@ -48,10 +71,23 @@ describe('.env supports edge cases', () => {
48
71
[ '--env-file=.env' , '--eval' , code ] ,
49
72
{ cwd : __dirname } ,
50
73
) ;
51
- assert . notStrictEqual ( child . stderr . toString ( ) , '' ) ;
74
+ assert . notStrictEqual ( child . stderr , '' ) ;
52
75
assert . strictEqual ( child . code , 9 ) ;
53
76
} ) ;
54
77
78
+ it ( 'should handle non-existent optional .env file' , async ( ) => {
79
+ const code = `
80
+ require('assert').strictEqual(1,1);
81
+ ` . trim ( ) ;
82
+ const child = await common . spawnPromisified (
83
+ process . execPath ,
84
+ [ '--env-file-if-exists=.env' , '--eval' , code ] ,
85
+ { cwd : __dirname } ,
86
+ ) ;
87
+ assert . notStrictEqual ( child . stderr , '' ) ;
88
+ assert . strictEqual ( child . code , 0 ) ;
89
+ } ) ;
90
+
55
91
it ( 'should not override existing environment variables but introduce new vars' , async ( ) => {
56
92
const code = `
57
93
require('assert').strictEqual(process.env.BASIC, 'existing');
@@ -106,7 +142,7 @@ describe('.env supports edge cases', () => {
106
142
'--eval' , `require('assert').strictEqual(process.env.BASIC, undefined);` ,
107
143
'--' , '--env-file' , validEnvFilePath ,
108
144
] ,
109
- { cwd : fixtures . path ( 'dotenv' ) } ,
145
+ { cwd : __dirname } ,
110
146
) ;
111
147
assert . strictEqual ( child . stdout , '' ) ;
112
148
assert . strictEqual ( child . stderr , '' ) ;
0 commit comments