forked from bencodezen/vue-enterprise-boilerplate
-
Notifications
You must be signed in to change notification settings - Fork 2
/
global.d.ts
83 lines (76 loc) · 2.7 KB
/
global.d.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import type { User } from '@models/user';
import type { TestingOptions, TestingPinia } from '@pinia/testing';
import { useAuthStore } from '@stores';
import { mount, shallowMount, type MountingOptions } from '@vue/test-utils';
import type { GlobalMountOptions } from '@vue/test-utils/dist/types';
import type { I18nOptions } from 'vue-i18n';
type ShallowMountType = typeof shallowMount;
type MountType = typeof mount;
// declare type globally
declare global {
// if you add any global properties/function in here, you also need to add to vite.config.ts > define
// these function are implemented in file ../tests/unit/setup.ts
let mount: MountType;
let shallowMount: ShallowMountType;
let shallowMountView: ShallowMountType;
type TestingOpts = TestingOptions & {
currentUser?: User | null;
};
/**
* Utility to mock store for easy testing
*/
let createModuleStore: (testingOpts: TestingOpts) => Promise<TestingPinia>;
/**
* Utility to create component mock data
*/
let createComponentMocks: (
mockData: Partial<Pick<GlobalMountOptions, 'mocks' | 'stubs'>> & {
/**
* Pinia testing options,
*/
store?: TestingOpts;
/** mock router component. Not useRouter, useRoute, you have to mock
* it by yourself using `vi.mock("vue-router", () =>({...}))`
*/
router?: boolean;
/** Set to true to mock i18n using default messages and locales, detail in file src/plugin/i18n.ts. Use with mount()
* If your template using sepecial function from i18 like message format, Pluralization. example:
* `t('views.home', {title: "Home"})`
* Otherwise use vi.mock:
* mock i18n
*`vi.mock('vue-i18n', () => ({
* useI18n: vi.fn().mockImplementation(() => ({
* t: vi.fn().mockImplementation((str: string) => {
* // convert from format views.login.meta.* to translated text
* return at(enLanguage, str).pop();
* }),
* })),
*}));`
*/
i18n?: I18nOptions | boolean;
/**
* mock css module $style in <templete> only. if you want to mock useCssModule()
* you have to mock useCssModule by yourself.
* `vi.mock('vue', async () => {
const vueModule = await vi.importActual<typeof import('vue')>('vue');
return {
...vueModule,
useCssModule: vi.fn().mockImplementation((): Record<string, string> => {
return {
iconCustomSomeIcon: 'generated-class-name',
};
}),
// ...mock other modules from vue package
};
});
`*/
style?: { [key: string]: string };
},
) => Promise<MountingOptions<any>>;
interface Window {
// Ref to root store instances, using in E2E testing.
authStore: ReturnType<typeof useAuthStore>;
Cypress: typeof Cypress;
}
}
export {};