54 lines
1.2 KiB
TypeScript
54 lines
1.2 KiB
TypeScript
import { flushSync, mount, unmount } from 'svelte';
|
|
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
import Button from './button.svelte';
|
|
import MenuButton from './menu-button.svelte';
|
|
|
|
describe('Button', () => {
|
|
afterEach(() => {
|
|
document.body.innerHTML = '';
|
|
});
|
|
|
|
it('转发 onclick 到原生按钮', async () => {
|
|
const handleClick = vi.fn();
|
|
const host = document.createElement('div');
|
|
document.body.appendChild(host);
|
|
|
|
const app = mount(Button, {
|
|
target: host,
|
|
props: {
|
|
onclick: handleClick,
|
|
},
|
|
});
|
|
flushSync();
|
|
|
|
(host.querySelector('button') as HTMLButtonElement).click();
|
|
|
|
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
|
|
await unmount(app);
|
|
host.remove();
|
|
});
|
|
|
|
it('通过 MenuButton 转发 onclick 到原生按钮', async () => {
|
|
const handleClick = vi.fn();
|
|
const host = document.createElement('div');
|
|
document.body.appendChild(host);
|
|
|
|
const app = mount(MenuButton, {
|
|
target: host,
|
|
props: {
|
|
onclick: handleClick,
|
|
},
|
|
});
|
|
flushSync();
|
|
|
|
(host.querySelector('button') as HTMLButtonElement).click();
|
|
|
|
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
|
|
await unmount(app);
|
|
host.remove();
|
|
});
|
|
});
|