补齐图片选择器关闭与空状态测试
Project CI / Repository checks (pull_request) Successful in 2m20s
Project CI / Backend tests (pull_request) Successful in 6m19s
Project CI / Native shell tests (pull_request) Successful in 20m15s
Project CI / Frontend tests (pull_request) Successful in 2m56s

新增遮罩点击关闭和空素材列表场景覆盖。
This commit is contained in:
2026-09-03 19:52:33 +08:00
parent 02949e3dad
commit dd16724948
@@ -34,11 +34,12 @@ function renderSelector(
value: string | null = null,
onChange = vi.fn(),
previewUrls: Record<string, string> = {},
selectorSprites: typeof sprites = sprites,
) {
return render(
<ImageAssetSelector
value={value}
sprites={sprites}
sprites={selectorSprites}
previewUrls={previewUrls}
readOnly={false}
onChange={onChange}
@@ -135,4 +136,26 @@ describe('ImageAssetSelector', () => {
await user.keyboard('{Enter}');
expect(onChange).toHaveBeenCalledWith('hero');
});
it('closes when the modal backdrop is clicked', async () => {
const user = userEvent.setup();
renderSelector();
await user.click(screen.getByRole('button', { name: '选择素材' }));
const dialog = screen.getByRole('dialog', { name: '选择图片素材' });
const overlay = dialog.parentElement;
expect(overlay).toBeTruthy();
await user.click(overlay!);
expect(screen.queryByRole('dialog', { name: '选择图片素材' })).toBeNull();
});
it('shows an empty state when no sprites are available', async () => {
const user = userEvent.setup();
renderSelector(null, vi.fn(), {}, {});
await user.click(screen.getByRole('button', { name: '选择素材' }));
const dialog = screen.getByRole('dialog', { name: '选择图片素材' });
expect(within(dialog).getByText('暂无可用素材')).toBeTruthy();
expect(
within(dialog).getByRole('button', { name: /清除选择/ }),
).toBeTruthy();
});
});