Files
shiftcraft/test/nuxt/counter-widget.test.ts
2026-04-17 23:26:01 +00:00

41 lines
1.3 KiB
TypeScript

import { describe, it, expect, vi } from 'vitest'
import { mountSuspended, mockNuxtImport } from '@nuxt/test-utils/runtime'
import { ref } from 'vue'
import CounterWidget from '~/components/Counter/Widget.vue'
const { useCounterMock, useUserMock } = vi.hoisted(() => ({
useCounterMock: vi.fn(),
// Default return value set here so the global fetchUser middleware
// doesn't crash before the test body runs
useUserMock: vi.fn(() => ({
isAuthenticated: false,
user: null,
authRefresh: vi.fn()
}))
}))
mockNuxtImport('useCounter', () => useCounterMock)
// Silence the global fetchUser middleware — prevents a real PocketBase authRefresh call
mockNuxtImport('useUser', () => useUserMock)
describe('Counter/Widget', () => {
it('renders the current count and increment/decrement buttons', async () => {
useCounterMock.mockReturnValue({
count: ref(42),
recordId: ref('rec1'),
fetchCurrentCount: vi.fn(),
subscribeToChanges: vi.fn(),
unsubscribe: vi.fn(),
increment: vi.fn(),
reset: vi.fn()
})
const wrapper = await mountSuspended(CounterWidget)
expect(wrapper.text()).toContain('42')
// Both +/- icon buttons should be present
expect(wrapper.findAll('button').length).toBeGreaterThanOrEqual(2)
})
})