Skip to content

Commit 8a1d759

Browse files
authoredJan 16, 2023
fix: define property instead of assigning it in vi.stubGlobal (#2685)
1 parent 15aa015 commit 8a1d759

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed
 

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

+6-2
Original file line numberDiff line numberDiff line change
@@ -259,8 +259,12 @@ class VitestUtils {
259259
public stubGlobal(name: string | symbol | number, value: any) {
260260
if (!this._stubsGlobal.has(name))
261261
this._stubsGlobal.set(name, Object.getOwnPropertyDescriptor(globalThis, name))
262-
// @ts-expect-error we can do anything!
263-
globalThis[name] = value
262+
Object.defineProperty(globalThis, name, {
263+
value,
264+
writable: true,
265+
configurable: true,
266+
enumerable: true,
267+
})
264268
return this
265269
}
266270

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

+20
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,32 @@ import { beforeEach, describe, expect, it, vi } from 'vitest'
55
declare global {
66
// eslint-disable-next-line no-var
77
var __defined__: unknown
8+
// eslint-disable-next-line no-var
9+
var __setter__: unknown
810
}
911

1012
describe('stubbing globals', () => {
1113
beforeEach(() => {
1214
delete globalThis.__defined__
15+
if (globalThis.__setter__)
16+
delete globalThis.__setter__
17+
vi.unstubAllGlobals()
18+
})
19+
20+
it('overrites setter', () => {
21+
const descriptor = {
22+
get: () => 'getter',
23+
set: () => {},
24+
configurable: true,
25+
}
26+
Object.defineProperty(globalThis, '__setter__', descriptor)
27+
expect(__setter__).toBe('getter')
28+
vi.stubGlobal('__setter__', 'stubbed')
29+
expect(__setter__).toBe('stubbed')
30+
expect(globalThis.__setter__).toBe('stubbed')
31+
expect(Object.getOwnPropertyDescriptor(globalThis, '__setter__')).not.toBe(descriptor)
1332
vi.unstubAllGlobals()
33+
expect(__setter__).toBe('getter')
1434
})
1535

1636
it('stubs and restores already defined value', () => {

‎test/core/test/vi.spec.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,7 @@ describe('testing vi utils', () => {
7777
expect(state.config.clearMocks).toBe(false)
7878
})
7979

80-
// TODO: it's unstable in CI, skip until resolved
81-
test.skip('loads unloaded module', async () => {
80+
test('loads unloaded module', async () => {
8281
let mod: any
8382
import('../src/timeout').then(m => mod = m)
8483

0 commit comments

Comments
 (0)
Please sign in to comment.