Skip to content

Commit c3b2757

Browse files
JSanchezIOsheremet-va
andauthoredSep 3, 2024··
feat(vitest): allow env to be stubbed to undefined (#6359)
Co-authored-by: Vladimir <sleuths.slews0s@icloud.com>
1 parent ad6e72f commit c3b2757

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed
 

‎docs/api/vi.md

+7-1
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ And while it is possible to spy on exports in `jsdom` or other Node.js environme
453453

454454
### vi.stubEnv {#vi-stubenv}
455455

456-
- **Type:** `(name: string, value: string) => Vitest`
456+
- **Type:** `<T extends string>(name: T, value: T extends "PROD" | "DEV" | "SSR" ? boolean : string | undefined) => Vitest`
457457

458458
Changes the value of environmental variable on `process.env` and `import.meta.env`. You can restore its value by calling `vi.unstubAllEnvs`.
459459

@@ -467,6 +467,12 @@ vi.stubEnv('NODE_ENV', 'production')
467467

468468
process.env.NODE_ENV === 'production'
469469
import.meta.env.NODE_ENV === 'production'
470+
471+
vi.stubEnv('NODE_ENV', undefined)
472+
473+
process.env.NODE_ENV === undefined
474+
import.meta.env.NODE_ENV === undefined
475+
470476
// doesn't change other envs
471477
import.meta.env.MODE === 'development'
472478
```

‎packages/vitest/src/integrations/vi.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ export interface VitestUtils {
346346
*/
347347
stubEnv: <T extends string>(
348348
name: T,
349-
value: T extends 'PROD' | 'DEV' | 'SSR' ? boolean : string
349+
value: T extends 'PROD' | 'DEV' | 'SSR' ? boolean : string | undefined
350350
) => VitestUtils
351351

352352
/**
@@ -642,13 +642,16 @@ function createVitest(): VitestUtils {
642642
return utils
643643
},
644644

645-
stubEnv(name: string, value: string | boolean) {
645+
stubEnv(name: string, value: string | boolean | undefined) {
646646
if (!_stubsEnv.has(name)) {
647647
_stubsEnv.set(name, process.env[name])
648648
}
649649
if (_envBooleans.includes(name)) {
650650
process.env[name] = value ? '1' : ''
651651
}
652+
else if (value === undefined) {
653+
delete process.env[name]
654+
}
652655
else {
653656
process.env[name] = String(value)
654657
}

‎test/core/test/stubs.test.ts

+9
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,13 @@ describe('stubbing envs', () => {
126126
vi.stubEnv('MY_TEST_ENV', true)
127127
expect(import.meta.env.MY_TEST_ENV).toBe('true')
128128
})
129+
130+
it('stubs to undefined and restores env', () => {
131+
vi.stubEnv('VITE_TEST_UPDATE_ENV', undefined)
132+
expect(import.meta.env.VITE_TEST_UPDATE_ENV).toBeUndefined()
133+
expect(process.env.VITE_TEST_UPDATE_ENV).toBeUndefined()
134+
vi.unstubAllEnvs()
135+
expect(import.meta.env.VITE_TEST_UPDATE_ENV).toBe('development')
136+
expect(process.env.VITE_TEST_UPDATE_ENV).toBe('development')
137+
})
129138
})

0 commit comments

Comments
 (0)
Please sign in to comment.