Skip to content

Commit a431df8

Browse files
authoredDec 25, 2022
fix: correctly automock nested interoped defaults (#2559)
* fix: correctly automock nested interoped defaults * chore: cleanup * chore: cleanup
1 parent a35ac70 commit a431df8

File tree

7 files changed

+36
-2
lines changed

7 files changed

+36
-2
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
const fn = () => {}
2+
3+
exports.fn = fn
4+
Object.defineProperty(exports, '__esModule', { value: true, enumerable: false })
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = require('./cjs-pseudoesm.cjs')
File renamed without changes.

‎examples/mocks/test/external.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import '../src/external.mjs'
1+
import '../src/external/external.mjs'
22
import { expect, test, vi } from 'vitest'
33
import axios from 'axios'
44

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// @vitest-environment jsdom
2+
3+
import * as modDefaultCjs from '../src/external/default-cjs.cjs'
4+
5+
vi.mock('../src/external/default-cjs.cjs')
6+
7+
test('default is mocked', () => {
8+
expect(vi.isMockFunction(modDefaultCjs.default.fn)).toBe(true)
9+
})

‎examples/mocks/vite.config.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export default defineConfig({
2424
globals: true,
2525
environment: 'node',
2626
deps: {
27-
external: [/src\/external\.mjs/],
27+
external: [/src\/external/],
2828
},
2929
},
3030
})

‎packages/vite-node/src/client.ts

+20
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,26 @@ export class ViteNodeRunner {
414414
return defaultExport !== undefined
415415
return prop in mod || (defaultExport && prop in defaultExport)
416416
},
417+
// this is needed for mocker to know what is available to mock
418+
ownKeys(mod) {
419+
const keys = Reflect.ownKeys(mod)
420+
if (!defaultExport || isPrimitive(defaultExport))
421+
return keys
422+
const allKeys = [...keys, 'default', ...Reflect.ownKeys(defaultExport)]
423+
return Array.from(new Set(allKeys))
424+
},
425+
getOwnPropertyDescriptor(mod, prop) {
426+
const descriptor = Reflect.getOwnPropertyDescriptor(mod, prop)
427+
if (descriptor)
428+
return descriptor
429+
if (prop === 'default' && defaultExport !== undefined) {
430+
return {
431+
value: defaultExport,
432+
enumerable: true,
433+
configurable: true,
434+
}
435+
}
436+
},
417437
})
418438
}
419439
}

0 commit comments

Comments
 (0)
Please sign in to comment.