mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-20 14:30:41 +00:00
## Summary Phase 2 of the VTL migration: migrate 11 interactive component tests from @vue/test-utils to @testing-library/vue (69 tests). Stacked on #10471. ## Changes - **What**: Migrate BatchCountEdit, BypassButton, BuilderFooterToolbar, ComfyActionbar, SidebarIcon, EditableText, UrlInput, SearchInput, TagsInput, TreeExplorerTreeNode, ColorCustomizationSelector from VTU to VTL - **Pattern transforms**: `trigger('click')` → `userEvent.click()`, `setValue()` → `userEvent.type()`, `findComponent().props()` → `getByRole/getByText/getByTestId`, `emitted()` → callback props - **Removed**: 4 `@ts-expect-error` annotations, 1 change-detector test (SearchInput `vm.focus`) - **PrimeVue**: `data-pc-name` selectors + `aria-pressed` for SelectButton, container queries for ColorPicker/InputIcon ## Review Focus - PrimeVue escape hatches in ColorCustomizationSelector (SelectButton/ColorPicker lack standard ARIA roles) - Teleport test in ComfyActionbar uses `container.querySelector` intentionally (scoped to teleport target) - SearchInput debounce tests use `fireEvent.update` instead of `userEvent.type` due to fake timer interaction - EditableText escape-then-blur test simplified: `userEvent.keyboard('{Escape}')` already triggers blur internally ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-10490-test-migrate-11-interactive-component-tests-from-VTU-to-VTL-Phase-2-32e6d73d3650817ca40fd61395499e3f) by [Unito](https://www.unito.io) --------- Co-authored-by: Amp <amp@ampcode.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
99 lines
2.4 KiB
TypeScript
99 lines
2.4 KiB
TypeScript
import { createTestingPinia } from '@pinia/testing'
|
|
import { render, screen } from '@testing-library/vue'
|
|
import userEvent from '@testing-library/user-event'
|
|
import { describe, expect, it, vi } from 'vitest'
|
|
import { createI18n } from 'vue-i18n'
|
|
|
|
import { useQueueSettingsStore } from '@/stores/queueStore'
|
|
|
|
import BatchCountEdit from './BatchCountEdit.vue'
|
|
|
|
const maxBatchCount = 16
|
|
|
|
vi.mock('@/platform/settings/settingStore', () => ({
|
|
useSettingStore: () => ({
|
|
get: (settingId: string) =>
|
|
settingId === 'Comfy.QueueButton.BatchCountLimit' ? maxBatchCount : 1
|
|
})
|
|
}))
|
|
|
|
const i18n = createI18n({
|
|
legacy: false,
|
|
locale: 'en',
|
|
messages: {
|
|
en: {
|
|
g: {
|
|
increment: 'Increment',
|
|
decrement: 'Decrement'
|
|
},
|
|
menu: {
|
|
batchCount: 'Batch Count'
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
function renderComponent(initialBatchCount = 1) {
|
|
const pinia = createTestingPinia({
|
|
createSpy: vi.fn,
|
|
stubActions: false,
|
|
initialState: {
|
|
queueSettingsStore: {
|
|
batchCount: initialBatchCount
|
|
}
|
|
}
|
|
})
|
|
|
|
const user = userEvent.setup()
|
|
|
|
render(BatchCountEdit, {
|
|
global: {
|
|
plugins: [pinia, i18n],
|
|
directives: {
|
|
tooltip: () => {}
|
|
}
|
|
}
|
|
})
|
|
|
|
const queueSettingsStore = useQueueSettingsStore()
|
|
|
|
return { user, queueSettingsStore }
|
|
}
|
|
|
|
describe('BatchCountEdit', () => {
|
|
it('doubles the current batch count when increment is clicked', async () => {
|
|
const { user, queueSettingsStore } = renderComponent(3)
|
|
|
|
await user.click(screen.getByRole('button', { name: 'Increment' }))
|
|
|
|
expect(queueSettingsStore.batchCount).toBe(6)
|
|
})
|
|
|
|
it('halves the current batch count when decrement is clicked', async () => {
|
|
const { user, queueSettingsStore } = renderComponent(9)
|
|
|
|
await user.click(screen.getByRole('button', { name: 'Decrement' }))
|
|
|
|
expect(queueSettingsStore.batchCount).toBe(4)
|
|
})
|
|
|
|
it('clamps typed values to queue limits on blur', async () => {
|
|
const { user, queueSettingsStore } = renderComponent(2)
|
|
const input = screen.getByRole('textbox', { name: 'Batch Count' })
|
|
|
|
await user.clear(input)
|
|
await user.type(input, '999')
|
|
await user.tab()
|
|
|
|
expect(queueSettingsStore.batchCount).toBe(maxBatchCount)
|
|
expect(input).toHaveValue(String(maxBatchCount))
|
|
|
|
await user.clear(input)
|
|
await user.type(input, '0')
|
|
await user.tab()
|
|
|
|
expect(queueSettingsStore.batchCount).toBe(1)
|
|
expect(input).toHaveValue('1')
|
|
})
|
|
})
|