#javascript #vue.js
#javascript #vue.js
Вопрос:
Существует глобальный компонент Snackbar, для которого я пишу тесты. Сам компонент довольно прост.
У него есть некоторый текст, показывающий статус (который не является prop или свойством данных, а скорее производным от объекта, отправленного с EventBus.$emit
вызовом).
Через три секунды компонент исчезает ИЛИ отображает другую панель закусок, хранящуюся в массиве внутри самого компонента.
Итак, я хочу проверить здесь две вещи:
- В любой момент времени появляется только одна панель закусок (которую, я полагаю, я получил).
- Через три секунды должна появиться другая панель закусок.
Вот мой код на данный момент:
import { render } from '@testing-library/vue'
import Snackbar from '../Snackbar.vue'
import EventBus from '@/services/EventBus'
describe('Snackbar', () => {
const role = 'alert'
it('should show only one snackbar at a time and should disappear after 3 seconds', async () => {
const { getByRole } = render(Snackbar, {stubs: ['ButtonComponent']})
for (let x = 0; x < 2; x ) {
const text = `Hello ${x}`
await EventBus.$emit('addSnack', { text })
}
const snackbar = getByRole(role)
expect(snackbar).toHaveTextContent('Hello 0')
// This might be redundant?
expect(snackbar).not.toHaveTextContent('Hello 1')
// Here is the problem (this never throws an error)
await waitFor(() => {
const snackbar2 = getByRole(role)
expect(snackbar2).toHaveTextContent('Hello 1');
}, 3500)
})
Ответ №1:
Вам нужно сделать it
тест асинхронным:
it('should detect an asynchronous thing', async () => {
await waitFor(() => {
const something = myFunction();
expect(something).toBe(true);
}, 3500);
});
См. раздел JEST> Тестирование асинхронного кода> Асинхронный / Ожидающий
Комментарии:
1. На самом деле это была опечатка с моей стороны, у меня уже есть async.