mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2026-05-16 05:23:39 +00:00
76 lines
2.1 KiB
TypeScript
76 lines
2.1 KiB
TypeScript
/*
|
|
* Tencent is pleased to support the open source community by making TMagicEditor available.
|
|
*
|
|
* Copyright (C) 2025 Tencent.
|
|
*/
|
|
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
|
|
import { defineComponent, h } from 'vue';
|
|
import { mount } from '@vue/test-utils';
|
|
|
|
import SearchInput from '@editor/components/SearchInput.vue';
|
|
|
|
vi.mock('@tmagic/design', async () => {
|
|
const actual: any = await vi.importActual('@tmagic/design');
|
|
return {
|
|
...actual,
|
|
TMagicInput: defineComponent({
|
|
name: 'TMagicInputStub',
|
|
props: ['modelValue'],
|
|
emits: ['input', 'update:modelValue'],
|
|
setup(props, { emit, slots }) {
|
|
return () =>
|
|
h(
|
|
'input',
|
|
{
|
|
value: props.modelValue,
|
|
onInput: (e: any) => {
|
|
emit('update:modelValue', e.target.value);
|
|
emit('input', e.target.value);
|
|
},
|
|
},
|
|
slots.prefix?.(),
|
|
);
|
|
},
|
|
}),
|
|
TMagicIcon: defineComponent({ render: () => h('i') }),
|
|
};
|
|
});
|
|
|
|
describe('SearchInput.vue', () => {
|
|
beforeEach(() => {
|
|
vi.useFakeTimers();
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.useRealTimers();
|
|
});
|
|
|
|
test('挂载后渲染输入框', () => {
|
|
const wrapper = mount(SearchInput as any);
|
|
expect(wrapper.find('input').exists()).toBe(true);
|
|
});
|
|
|
|
test('输入后 300ms 触发 search 事件', async () => {
|
|
const wrapper = mount(SearchInput as any);
|
|
const input = wrapper.find('input');
|
|
await input.setValue('hello');
|
|
|
|
expect(wrapper.emitted('search')).toBeFalsy();
|
|
|
|
vi.advanceTimersByTime(300);
|
|
expect(wrapper.emitted('search')).toBeTruthy();
|
|
expect((wrapper.emitted('search') as any[])[0][0]).toBe('hello');
|
|
});
|
|
|
|
test('连续输入只触发一次 search', async () => {
|
|
const wrapper = mount(SearchInput as any);
|
|
const input = wrapper.find('input');
|
|
await input.setValue('a');
|
|
vi.advanceTimersByTime(100);
|
|
await input.setValue('ab');
|
|
vi.advanceTimersByTime(300);
|
|
expect(wrapper.emitted('search')?.length).toBe(1);
|
|
expect((wrapper.emitted('search') as any[])[0][0]).toBe('ab');
|
|
});
|
|
});
|