Как тестировать onMounted и watch на Vue Test Utils, Vue 3?

Когда дело доходит до тестирования функций onMounted и watch в Vue 3 с использованием Vue Test Utils, есть несколько подходов, которые могут помочь вам проверить правильность их работы.

Первым шагом будет установка необходимых зависимостей. Необходимо установить @vue/test-utils, vue и jest или любую другую библиотеку для тестирования, которую вы предпочитаете. Они могут быть установлены с помощью npm или yarn.

npm install --save-dev @vue/test-utils vue jest
yarn add --dev @vue/test-utils vue jest

После установки зависимостей мы можем перейти к созданию тестового файла. Создайте новый файл с расширением .spec.js (например, component.spec.js) и добавьте в него следующий код:

import { mount } from '@vue/test-utils';
import MyComponent from '@/components/MyComponent.vue';

describe('MyComponent', () => {
  it('should call onMounted when mounted', () => {
    const onMountedStub = jest.fn();
    mount(MyComponent, {
      global: {
        plugins: [onMountedStub]
      }
    });

    expect(onMountedStub).toHaveBeenCalled();
  });

  it('should call watch when a prop changes', async () => {
    const watchStub = jest.fn();
    const wrapper = mount(MyComponent, {
      props: {
        myProp: 'initialValue'
      },
      global: {
        plugins: [watchStub]
      }
    });

    await wrapper.setProps({ myProp: 'newValue' });

    expect(watchStub).toHaveBeenCalledWith('myProp', 'newValue', 'initialValue');
  });
});

В этом файле мы импортируем функцию mount из @vue/test-utils, а также компонент MyComponent.vue, который мы хотим протестировать. Затем мы описываем блок describe для группировки тестов и определяем два теста: should call onMounted when mounted и should call watch when a prop changes.

В первом тесте мы создаем заглушку onMountedStub с помощью jest.fn() и передаем ее в компонент через опцию global.plugins. После этого мы монтируем компонент и проверяем, вызвалась ли заглушка onMountedStub с помощью утверждения expect().

Во втором тесте мы используем тот же шаблон, но теперь мы передаем заглушку watchStub и начальное значение свойства myProp в компонент. Затем мы изменяем значение свойства с помощью await wrapper.setProps({ myProp: 'newValue' }) и проверяем, вызвалась ли заглушка watchStub с ожидаемыми аргументами.

Таким образом, вы можете использовать данные кейсы для тестирования функций onMounted и watch в Vue 3 с помощью Vue Test Utils и выбранной вами библиотеки тестирования. Следуйте этим подходам и адаптируйте их под свои потребности, чтобы убедиться, что эти функции работают правильно в вашем компоненте.