Пример проекта для этой конфигурации доступен на GitHub.
TypeScript — популярное надмножество JavaScript, которое добавляет типы и классы поверх обычного JS. Vue Test Utils включает типы в распределённый пакет, поэтому он хорошо работает с TypeScript.
В этом руководстве мы рассмотрим, как настроить тестовую конфигурацию для TypeScript-проекта с использованием Jest и Vue Test Utils из базовой настройки Vue CLI TypeScript.
Сначала вам нужно создать проект. Если у вас нет Vue CLI, установите его глобально:
$ npm install -g @vue/cli
И создайте проект, запустив следующую команду:
$ vue create hello-world
В командной строке выберите Manually select features
, выберите TypeScript
и нажмите клавишу ввода. Это создаст проект с уже настроенным для работы TypeScript.
::: tip ПРИМЕЧАНИЕ Если вы хотите получить более подробное руководство по настройке Vue с помощью TypeScript, ознакомьтесь с [руководством для начинающих по TypeScript во Vue] (https://github.com/Microsoft/TypeScript-Vue-Starter). :::
Следующий шаг — добавить Jest к проекту.
Jest — это программа для запуска тестов, разработанный Facebook и направленный на предоставление многофункционального решения для модульного тестирования. Вы можете узнать больше о Jest на его официальной документации.
Установить Jest и Vue Test Utils:
$ npm install --save-dev jest @vue/test-utils
Затем определите команду test:unit
в секции scripts в package.json
.
// package.json
{
// ..
"scripts": {
// ..
"test:unit": "jest"
}
// ..
}
Чтобы научить Jest обрабатывать файлы с расширением .vue
, нам нужно установить и настроить препроцессор vue-jest
:
npm install --save-dev vue-jest
Затем создайте блок jest
в package.json
:
{
// ...
"jest": {
"moduleFileExtensions": [
"js",
"ts",
"json",
// указываем Jest обрабатывать файлы с расширением `*.vue`
"vue"
],
"transform": {
// обработка файлов с расширением `*.vue` с помощью `vue-jest`
".*\\.(vue)$": "vue-jest",
},
"testURL": "http://localhost/"
}
}
Чтобы использовать файлы TypeScript в тестах, нам нужно настроить Jest для компиляции TypeScript. Для этого нам нужно установить ts-jest
:
$ npm install --save-dev ts-jest
Затем нам нужно указать Jest обработать тестовые файлы TypeScript с помощью ts-jest
, добавив запись в jest.transform
в package.json
:
{
// ...
"jest": {
// ...
"transform": {
// ...
// обработка файлов с расширением `*.ts` с помощью `ts-jest`
"^.+\\.tsx?$": "ts-jest"
},
// ...
}
}
По умолчанию Jest будет рекурсивно выбирать все файлы с расширением .spec.js
или .test.js
по всему проекту.
Чтобы запустить тестовые файлы с расширением .ts
, нам нужно изменить testRegex
в разделе конфигурации файла package.json
.
Добавьте следующее в поле jest
в package.json
:
{
// ...
"jest": {
// ...
"testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$"
}
}
Jest рекомендует создать каталог __tests__
рядом с тестируемым кодом, но не стесняйтесь структурировать ваши тесты по своему усмотрению. Просто остерегайтесь того, что Jest создаст каталог __snapshots__
рядом с тестовыми файлами, которые выполняют тестирование моментальными снимками.
Теперь у нас есть проект, пришло время написать тест.
Создайте файл src/components/__tests__/HelloWorld.spec.ts
и добавьте следующий код:
// src/components/__tests__/HelloWorld.spec.ts
import { shallowMount } from '@vue/test-utils'
import HelloWorld from '../HelloWorld.vue'
describe('HelloWorld.vue', () => {
test('renders props.msg when passed', () => {
const msg = 'new message'
const wrapper = shallowMount(HelloWorld, {
propsData: { msg }
})
expect(wrapper.text()).toMatch(msg)
})
})
Это все, что нам нужно сделать, чтобы заставить TypeScript и Vue Test Utils работать вместе!