/
imports.test.ts
69 lines (51 loc) · 2.23 KB
/
imports.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import { expect, test } from 'vitest'
import { dynamicRelativeImport } from '../src/relative-import'
test('dynamic relative import works', async () => {
const stringTimeoutMod = await import('./../src/timeout')
const timeoutPath = './../src/timeout'
const variableTimeoutMod = await import(timeoutPath)
expect(stringTimeoutMod).toBe(variableTimeoutMod)
})
test('Relative imports in imported modules work', async () => {
const relativeImportFromFile = await dynamicRelativeImport('timeout')
const directImport = await import('./../src/timeout')
expect(relativeImportFromFile).toBe(directImport)
})
test('dynamic aliased import works', async () => {
const stringTimeoutMod = await import('./../src/timeout')
const timeoutPath = '@/timeout'
const variableTimeoutMod = await import(timeoutPath)
expect(stringTimeoutMod).toBe(variableTimeoutMod)
})
test('dynamic absolute import works', async () => {
const stringTimeoutMod = await import('./../src/timeout')
const timeoutPath = '/src/timeout'
const variableTimeoutMod = await import(timeoutPath)
expect(stringTimeoutMod).toBe(variableTimeoutMod)
})
test('data with dynamic import works', async () => {
const dataUri = 'data:text/javascript;charset=utf-8,export default "hi"'
const { default: hi } = await import(dataUri)
expect(hi).toBe('hi')
})
test('dynamic import has Module symbol', async () => {
const stringTimeoutMod = await import('./../src/timeout')
// @ts-expect-error The symbol won't exist on the import type
expect(stringTimeoutMod[Symbol.toStringTag]).toBe('Module')
})
test('dynamic import has null prototype', async () => {
const stringTimeoutMod = await import('./../src/timeout')
expect(Object.getPrototypeOf(stringTimeoutMod)).toBe(null)
})
test('dynamic import throws an error', async () => {
const path = './some-unknown-path'
const imported = import(path)
await expect(imported).rejects.toThrowError(/Failed to load/)
// @ts-expect-error path does not exist
await expect(() => import('./some-unknown-path')).rejects.toThrowError(/Failed to load/)
})
test('can import @vite/client', async () => {
const name = '@vite/client'
await expect(import(name)).resolves.not.toThrow()
await expect(import(`/${name}`)).resolves.not.toThrow()
})