| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
-
- import { describe, it, expect, beforeEach } from 'vitest'
- import { mount } from '@vue/test-utils'
- import MenuItemVue from '../MenuItem.vue'
- import { MenuItem } from '@/helpers/common'
- import { createPinia, setActivePinia } from 'pinia'
- describe('MenuItem', () => {
- let wrapper
-
- // перед выполнением каждого теста мы должны создать окружение
- // в нашем случае хранилище и экземпляр компонента
- beforeEach(() => {
- setActivePinia(createPinia())
- // метод mount монтирует компонент с параметрами
- wrapper = mount(MenuItemVue, {
- props: { item: new MenuItem('test', 100) }
- })
- })
-
- // в интернетах пишут, что it это просто алиас для test
- it('Элемент меню содержит название', () => {
- // здесь мы получаем текстовое представление компонента (text())
- // и ищем в нём название блюда (toContain)
- // если находит, значит компонент смонтировался нормально
- expect(wrapper.text()).toContain('test')
- })
- it('У элемента меню есть кнопка и при клике на неё цена переезжает в описание', async () => {
- // метод find ищет в компоненте элемент или класс (тема css-селекторы)
- // и генерирует на нём событие click
- await wrapper.find('.price-button').trigger('click')
- // все события, генерируемые компонентом, собираются в очередь
- // и мы просто проверяем длину очереди событий
- // expect(wrapper.emitted('click')).toHaveLength(1)
- // в название должна переехать цена
- const title = wrapper.find('.title')
- expect(title.text()).toContain('100')
- })
- it.skip('Элемент меню генерирует событие click', () => {
- // компонент обрабатывает клик прямо по внешнему div-у
- // поэтому можем генерировать событие прямо на нём
- wrapper.trigger('click')
- // если бы в компонента была какая-то кнопка, то надо было бы
- // генерировать событие у неё
- // wrapper.find('button').trigger('click')
- // все события, генерируемые компонентом, собираются в очередь
- // и мы просто проверяем длину очереди событий
- expect(wrapper.emitted('click')).toHaveLength(1)
- })
- it('При клике на кнопку с ценой должен появиться счётчик и кнопки "-" и "+", при клике на кнопку "+" счётчик должен приянть значение "2"', async () => {
- // после клика перестраивается DOM, поэтому заворачиваем в await
- await wrapper.find('.price-button').trigger('click')
- // в компоненте должен появиться элемент с классом .qty-value
- expect(wrapper.find('.qty-value').exists()).toBe(true)
- // кнопка "-"
- expect(wrapper.find('.qty-minus').exists()).toBe(true)
- // и кнопка "+"
- const plusButton = wrapper.find('.qty-plus')
- expect(plusButton.exists()).toBe(true)
- await plusButton.trigger('click')
- const value = wrapper.find('.qty-value')
- expect(value.text()).toEqual('2')
- // expect(value.element.text).toContain('1')
- })
- })
- // https://blog.logrocket.com/advanced-guide-vitest-testing-mocking/
- // https://github.com/mayashavin/component-testing-vitest/blob/main/src/components/__tests__/Movies.spec.js
- // https://www.vuemastery.com/blog/getting-started-with-vitest/#wrapping-up
- // https://github.com/igorbabko/vue-unit-testing/blob/main/test/components/ActivityItem.test.ts
|