Автор оригинала: FreeCodeCamp Community Member.
EDD Yerburgh
В этом руководстве я собираюсь показать вам, как тестировать компоненты Vue.
Мы собираемся написать модульные тесты и тесты снимки с помощью пробирки Weed и Vue. Все без учета.
Это руководство для пользователей, знакомых с помощью тестирования подразделения. Если вы новичны для тестирования подразделения, проверьте мою статью на Установка тестирования Vue компонентов для начинающих Отказ
Настраивать
Я сделал Простой стартовый проект Отказ Git клонировать его в каталог:
git clone https://github.com/eddyerburgh/vue-unit-test-starter.git
CD в него и установите зависимости:
cd vue-unit-test-starter && npm install
Когда зависимости установлены, запустите сервер разработки:
npm run dev
Теперь мы можем вернуться к коду.
Одно можно поговорить о псевдониме. Псевдонимы – это способ использования сокращенного обозначения для импорта файлов. Вместо длительных операторов импорта, таких как приведенная ниже:
import someModule from '../../../../../src/components/someModule'
Вы можете использовать сокращенную запись или псевдоним. Общий псевдоним – это @ Символ, который разрешит к SRC Каталог:
import someModule from '@/components/someModule'
ПРИМЕЧАНИЕ. Вы можете установить любой псевдоним, который вы хотите, но проекты VUE-CLI используют @ обратиться к SRC каталог.
В проектах Vue-CLi, WebPack используется для добавления функций Отказ Это здорово, но мы не используем WebPack, чтобы запустить наши тесты. Нам нужен другой способ разрешить псевдонимы.
Вот где находится Бабел. Там плагин – плагин-модуль Babel-Plugule – Resolver – это разрешает псевдонимы в Вавиле. Вы можете увидеть это в .babelrc Отказ Он используется только в тестовой среде, потому что при запуске разработчики Dev или Production WebPack делает разрешение псевдонима.
Проверьте этот файл:
Хорошо, теперь у вас есть обзор проекта, пришло время добавить шутку.
Востребоваться
Jest – это тестовая структура. Это один из Самые быстрые структуры тестирования для Vue Один файловые компоненты (SFC).
Помимо проколочных тестов, Jest поставляется с загрузкой других функций из коробки, такого как издевательства, охват кода и тестирование снимков.
Первое, что нужно сделать, это установить jest:
npm install --save-dev jest
Чтобы проверить SFCS, вам нужно скомпилировать их в JavaScript, прежде чем запустить тесты. Если вы попытаетесь запустить невременную SFC, вы получите синтаксисную ошибку.
Шума не сознает .vue Файлы из коробки. Вы должны сказать это, чтобы скомпилировать их. Вы делаете это, добавив jest поле к Package.json Отказ
Добавьте код ниже на ваш Package.json Отказ
"jest": { "moduleFileExtensions": [ "js", "json", "vue" ], "transform": { "^.+\\.js$": "/node_modules/babel-jest", ".*\\.(vue)$": "/node_modules/vue-jest" } } Вы увидите modulefileextensions поле. Это говорит о чем-то, чтобы запустить файлы с .vue расширение, а также .js и . JSON Отказ
Там тоже трансформировать поле. Это говорит о том, как скомпилировать файлы, прежде чем запустить их. Это совпадает со всеми .js Файлы, а также компилирует с бабел-шутом. Все файлы .vue скомпилированы с vue-jest.
Это пользовательские преобразования, построенные для шума. Babel-jest, компилирует JavaScript. Vue-jest берет .vue Файлы и компилирует их в JavaScript.
Вам нужно установить оба пакета:
npm install --save-dev babel-jest vue-jest
Хорошо, круто, теперь вы должны добавить дымовой тест, чтобы убедиться, что все работает.
В SRC/Компоненты Создать __tests__ каталог. Добавить MessageToggle.spec.js файл. Таким образом, полный путь к файлу будет SRC/Компоненты/__ Тесты __/MessageToggle.spec.js Отказ
Скопируйте код ниже в файл:
Шумит все .js Файлы в __tests__ каталог автоматически. Он даже добавляет переменную тестовой среды, поэтому все ваш тестовый скрипт выполняет работу.
В Сценарии поле вашего Package.json Добавьте единица Сценарий:
"unit": "jest"
Теперь запустите скрипт:
npm run unit
Отличный, первый проходящий тест?
Теперь вы собираетесь написать более сложные тесты, используя Vue Test Utils.
Vue Test Utils
Vue Test Utils На данный момент находится в бета-версии, но вы можете использовать его сейчас без проблем. API в значительной степени завершен.
Установите это:
npm install --save-dev @vue/test-utils
Теперь вы собираетесь заменить тест в MessageToggle.spec.js с тестами с использованием Vue Test Utils.
Скопируйте код ниже в SRC/Компоненты/__ Тесты __/MessageToggle.spec.js
Здесь мы можем использовать Гора Функция для возврата объекта обертки. обертка содержит некоторые помощники, такие как текст , что помогает утверждать компоненты. Вы можете увидеть полный список Документы Отказ
Хорошо, давайте добавим более сложный тест, который выполняет действие на MessageToggle компонент. Скопируйте код ниже в MessageToggle.spec.js :
На этот раз мы нажимаем кнопку ( # Toggle-Message ) в MessageToggle и проверяя, что < ; P> Tag Text изменился правильно.
Теперь запустите тестовый скрипт:
npm run unit
Woop, прохождение тестов! ?
Vue Test Utils реферат от Vue внутренних органов. Итак, все, что вам нужно сделать, это изучить API Test Test Utils.
Теперь вы собираетесь написать тест для компонента списка. Компонент списка принимает реквизиты, к счастью, тестовые сообщения Vue дают нам способ пропускать опоры при монтаже компонента.
Создать файл /src/components/__Tests__/List.spec.js и вставить в код ниже
На этот раз вы заметите, что мы используем неглубокий функция. Это так же, как Гора , за исключением того, что он только делает компонент один уровень глубокой. Вообще, лучше использовать мелководье.
Теперь вы написали несколько модульных тестов, пришло время посмотреть на тестирование снимков.
Тестирование снимков
У Jest имеет эту отличную функцию, называемую моментальным тестом.
Тестирование снимков в основном принимает копию дерева вашего компонента в виде строки, а затем сравнивается с ним каждый раз, когда вы запускаете тесты. Если отображаемый компонент изменяется HTML, тест не удается.
Давайте добавим тест на снимка на Messag.spec.js Отказ
Вам нужно сделать компонент в строку с помощью Vue-Server-Renderer. Возвращенная строка не очень красивая, поэтому вы должны добавить jest-serializer-vue, чтобы набрать свои снимки.
npm install --save-dev vue-server-renderer jest-serializer-vue
Вам также необходимо сказать, чтобы использовать сериализатор. Добавить Спилкамиализаторы поле внутри jest поле в вашем Package.json :
"snapshotSerializers": [ "/node_modules/jest-serializer-vue"]
Теперь обновите list.spec.js, чтобы включить тест на снижение:
Этот тест неглубокий устанавливает компонент и отображает его в HTML-строку с Vue-Server-renderer.
Теперь запустите свои тесты:
npm run unit
Вы увидите, что некоторые новые выходные данные о сохраненном снимке. Иди посмотреть в SRC/Компоненты/__ Тесты __/__ Снимок __/list.spec.js.snap :
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`List.vue has same HTML structure 1`] = `
- list item one
- list item two
Круто, снимок. ?
Теперь, если разметка List.vue Изменения, Jest предупредим вас с моментальным снимок, когда вы запустите тесты.
Вывод
Теперь вы настроили тесты подразделения и тесты снимки с помощью пробирки Weed и Vue.
Я пропустил через несколько концепций. Вы можете посмотреть на Готовый репозиторий на Github Если ваш проект не работает правильно.
Jest имеет Больше возможностей сделать тестирование проще.
Vue Test Utils также имеет гораздо больше методов – Проверьте документы Отказ
Устройство тестирования Vue Components никогда не было проще, поэтому выйдите туда и напишите некоторые тесты!
Если вы узнали что-то из этой статьи, поделитесь и дайте? чтобы получить слово!