@@ -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', '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