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
84
85
| /* @vitest-environment happy-dom */
|
| import { flushPromises, mount } from '@vue/test-utils';
| import { afterEach, describe, expect, it, vi } from 'vitest';
| import { nextTick } from 'vue';
|
| import CustomPrintPreviewPane from '../CustomPrintPreviewPane.vue';
|
| vi.mock('ant-design-vue', async () => {
| const { defineComponent, h } = await import('vue');
|
| return {
| Button: defineComponent({
| name: 'AButton',
| emits: ['click'],
| setup(_, { emit, slots }) {
| return () => h('button', { type: 'button', onClick: () => emit('click') }, slots.default?.());
| },
| }),
| Empty: defineComponent({
| name: 'AEmpty',
| setup() {
| return () => h('div', { 'data-test': 'empty' });
| },
| }),
| Result: defineComponent({
| name: 'AResult',
| setup(_, { slots }) {
| return () => h('div', { 'data-test': 'result' }, slots.extra?.());
| },
| }),
| Spin: defineComponent({
| name: 'ASpin',
| setup() {
| return () => h('div', { 'data-test': 'spin' });
| },
| }),
| };
| });
|
| describe('CustomPrintPreviewPane', () => {
| afterEach(() => {
| vi.restoreAllMocks();
| vi.unstubAllGlobals();
| });
|
| it('does not emit stale loaded event after unmounting during html-file loading', async () => {
| let resolveFetch: (value: Response) => void = () => {};
| const fetchMock = vi.fn(
| () =>
| new Promise<Response>((resolve) => {
| resolveFetch = resolve;
| }),
| );
| vi.stubGlobal('fetch', fetchMock);
| const handleError = vi.fn();
| const handleLoaded = vi.fn();
| const handleLoading = vi.fn();
| vi.spyOn(console, 'error').mockImplementation(() => {});
|
| const wrapper = mount(CustomPrintPreviewPane, {
| props: {
| config: {
| data: {},
| template: 'print',
| type: 'html-file',
| },
| onError: handleError,
| onLoaded: handleLoaded,
| onLoading: handleLoading,
| },
| });
|
| await nextTick();
| expect(fetchMock).toHaveBeenCalled();
|
| wrapper.unmount();
| resolveFetch(new Response('', { status: 404 }));
| await flushPromises();
|
| expect(handleLoaded).not.toHaveBeenCalled();
| expect(handleError).not.toHaveBeenCalled();
| expect(handleLoading).toHaveBeenCalledWith(true);
| });
| });
|
|