feat(test): add SearchForm component tests

This commit is contained in:
Phan An 2022-05-12 11:51:58 +02:00
parent 6c5db09425
commit a60cf1eb94
No known key found for this signature in database
GPG key ID: A81E4477F0BB6FDC
3 changed files with 44 additions and 5 deletions

View file

@ -23,7 +23,7 @@ new class extends ComponentTestCase {
it('toggles search form (mobile only)', async () => {
isMobile.any = true
const { getByTitle, getByTestId, queryByTestId } = this.render(AppHeader, {
const { getByTitle, getByRole, queryByRole } = this.render(AppHeader, {
global: {
stubs: {
SearchForm
@ -31,12 +31,12 @@ new class extends ComponentTestCase {
}
})
expect(await queryByTestId('search-form')).toBeNull()
expect(await queryByRole('search')).toBeNull()
await fireEvent.click(getByTitle('Show or hide the search form'))
await this.tick()
getByTestId('search-form')
getByRole('search-form')
})
it.each([[true, true, true], [false, true, false], [true, false, false], [false, false, false]])(

View file

@ -0,0 +1,39 @@
import { expect, it, vi } from 'vitest'
import router from '@/router'
import ComponentTestCase from '@/__tests__/ComponentTestCase'
import SearchForm from './SearchForm.vue'
import { fireEvent } from '@testing-library/vue'
import { eventBus } from '@/utils'
new class extends ComponentTestCase {
protected test () {
// skipping because of unstable getRootNode() issues
it.skip('sets focus into search box when requested', async () => {
const { getByRole } = this.render(SearchForm)
eventBus.emit('FOCUS_SEARCH_FIELD')
expect(getByRole('searchbox')).toBe(document.activeElement)
})
it('goes to search screen when search box is focused', async () => {
const mock = this.mock(router, 'go')
const { getByRole } = this.render(SearchForm)
await fireEvent.focus(getByRole('searchbox'))
expect(mock).toHaveBeenCalledWith('search')
})
it('emits an event when search query is changed', async () => {
vi.useFakeTimers()
const mock = this.mock(eventBus, 'emit')
const { getByRole } = this.render(SearchForm)
await fireEvent.update(getByRole('searchbox'), 'hey')
expect(mock).toHaveBeenCalledWith('SEARCH_KEYWORDS_CHANGED', 'hey')
vi.useRealTimers()
})
}
}

View file

@ -1,5 +1,5 @@
<template>
<div id="searchForm" class="side search" data-testid="search-form" role="search">
<div id="searchForm" class="side search" role="search">
<input
ref="input"
v-model="q"
@ -29,7 +29,7 @@ const onInput = debounce(() => {
_q && eventBus.emit('SEARCH_KEYWORDS_CHANGED', _q)
}, 500)
const goToSearchScreen = () => router.go('/search')
const goToSearchScreen = () => router.go('search')
eventBus.on({
FOCUS_SEARCH_FIELD () {