• Как протестировать vue компонент на открытие модального окна через vitest?

    @Esm322 Автор вопроса
    Ошибка заключалась в shallowMount. Вместо shallowMount нужно было использовать mount, т.к shallowMount удаляет из родительского компонента дочерние компоненты и подставляет вместо них заглушки. Т.е тест должен был выглядеть так:
    import { mount } from '@vue/test-utils'
    
    beforeEach(() => {
        wrapper = mount(MainView, {
          global: {
            plugins: [
              createTestingPinia({
                createSpy: vi.fn,
                initialState: {
                  client: {
                    clientsData: [client]
                  }
                }
              })
            ]
          }
        })
      })
    
      it('openning modal window add', async () => {
        expect(wrapper.find('.modal').exists()).toBe(false)
        await wrapper.find('#add').trigger('click')
        expect(wrapper.find('.modal').exists()).toBe(true)
      })
    })
    Ответ написан
    Комментировать
  • Как исправить ошибки TypeError и getActivePinia() при тестировании в vitest?

    @Esm322 Автор вопроса
    Если кому-то понадобится. Для того, чтобы избавиться от ошибки Pinia, я добавил createSpy: vi.fn. А для ошибки TypeError, я указал начальное состояние с точной структурой объекта, который используется в composables для рендера:
    import { describe, it, expect, beforeEach, vi } from 'vitest'
    
    import { shallowMount } from '@vue/test-utils'
    
    import { createTestingPinia } from '@pinia/testing'
    
    import MainView from '@/views/MainView.vue'
    
    describe('MainView.vue', () => {
      let wrapper: any
    
      const client = {
        id: 1,
        firstName: 'test',
        secondName: 'testov',
        thirdName: 'testovich',
        fullName: 'testov test testovich',
        date: {
          newDate: new Date(),
          nowDate: Date.now()
        },
        edit: {
          newEdit: new Date(),
          nowEdit: Date.now()
        },
        contacts: [
          {
            block: {
              name: 'component'
            },
            selectValue: '',
            inputValue: ''
          }
        ],
        newdCreateDate: 'today',
        newEditDate: 'today'
      }
    
      beforeEach(() => {
        wrapper = shallowMount(MainView, {
          global: {
            plugins: [
              createTestingPinia({
                createSpy: vi.fn,
                initialState: {
                  client: {
                    clientsData: [client]
                  }
                }
              })
            ]
          }
        })
      })
    
      it('renders properly', () => {
        expect(wrapper.find('.modal').exists()).toBe(false)
      })
    })
    Ответ написан
    Комментировать