From b14960dd5f6df34540cfe2e40037f60bf0503b8b Mon Sep 17 00:00:00 2001 From: denis moshkin Date: Sun, 22 Dec 2024 13:18:57 +0300 Subject: [PATCH] docs(ru): add `forms` page, check spelling --- docs/.vitepress/config/ru.mts | 2 +- docs/ru/guide/essentials/a-crash-course.md | 6 +- docs/ru/guide/essentials/event-handling.md | 6 +- docs/ru/guide/essentials/forms.md | 409 +++++++++++++++++++++ 4 files changed, 416 insertions(+), 7 deletions(-) create mode 100644 docs/ru/guide/essentials/forms.md diff --git a/docs/.vitepress/config/ru.mts b/docs/.vitepress/config/ru.mts index e0624c9af..ecb94c9a2 100644 --- a/docs/.vitepress/config/ru.mts +++ b/docs/.vitepress/config/ru.mts @@ -54,7 +54,7 @@ export const ruConfig: LocaleSpecificConfig = { text: 'Тестирование генерации событий', link: '/ru/guide/essentials/event-handling' }, - { text: 'Testing Forms', link: '/guide/essentials/forms' }, + { text: 'Тестирование форм', link: '/ru/guide/essentials/forms' }, { text: 'Passing Data to Components', link: '/guide/essentials/passing-data' diff --git a/docs/ru/guide/essentials/a-crash-course.md b/docs/ru/guide/essentials/a-crash-course.md index 460518897..5165ef089 100644 --- a/docs/ru/guide/essentials/a-crash-course.md +++ b/docs/ru/guide/essentials/a-crash-course.md @@ -5,7 +5,7 @@ - Добавлять компоненты - Находить элементы - Заполнять формы -- Вызывать события +- Вызвать события ## Приступая к изучению @@ -78,7 +78,7 @@ test('renders a todo', () => { ## Добавление новой задачи -Следующий сценарий, который мы добавим для пользователя, будет создание новой задачи. Чтобы так сделать, нам нужна форма с полями ввода для пользователя, чтобы ввести какой-то текст. Когда пользователь подтвердит отправку формы, мы ожидаем новую отрисованную задачу. Давай взгляним на этот тест: +Следующий сценарий, который мы добавим для пользователя, будет создание новой задачи. Чтобы так сделать, нам нужна форма с полями ввода для пользователя, чтобы ввести какой-то текст. Когда пользователь подтвердит отправку формы, мы ожидаем новую отрисованную задачу. Давай взглянем на этот тест: ```js import { mount } from '@vue/test-utils' @@ -256,6 +256,6 @@ test('creates a todo', async () => { - Используйте `mount()` для отображения компонента. - Используйте `get()` и `findAll()` для получения DOM элементов. -- `trigger()` и `setValue()` - помошники для имитации пользовательского ввода. +- `trigger()` и `setValue()` - помощники для имитации пользовательского ввода. - Изменение DOM это асинхронная операция, поэтому убедитесь, что используете `async` и `await`. - Тестирование обычно состоит из трех фаз: подготовка, действие, проверка. diff --git a/docs/ru/guide/essentials/event-handling.md b/docs/ru/guide/essentials/event-handling.md index 23bbaf579..939639262 100644 --- a/docs/ru/guide/essentials/event-handling.md +++ b/docs/ru/guide/essentials/event-handling.md @@ -41,7 +41,7 @@ test('emits an event when clicked', () => { }) ``` -> Если ты еще не видел `trigger()` до этого, не беспокойся. Он используется для имитации действий пользователя. Ты можешь узнать больше в [Формы](/guide/essentials/forms). +> Если ты еще не видел `trigger()` до этого, не беспокойся. Он используется для имитации действий пользователя. Ты можешь узнать больше в [Формы](/ru/guide/essentials/forms). Обратите внимание, что `emitted()` возвращает объект, где каждый ключ совпадает с генерированным событием. В данном случае, `increment`. @@ -112,7 +112,7 @@ const Counter = { } ``` -Как делали раньше, нам нужно инициировать `click` событие на ` +``` + +Для вызова события click, нам нужно использовать `trigger` метод. + +```js +test('trigger', async () => { + const wrapper = mount(Component) + + // вызвать событие + await wrapper.find('button').trigger('click') + + // проверить некоторое выполненное действие, например, сгенерированное событие. + expect(wrapper.emitted()).toHaveProperty('submit') +}) +``` + +> Если ты не знаком с `emitted()`, не волнуйтесь. Он используется для проверки сгенерированных событий компонента. Ты можешь изучить больше в [Обработка событий](/ru/guide/essentials/event-handling). + +Мы вызываем слушатель события `click`, так что компонент выполнит `submit` метод. Как мы делали с `setValue`, мы используем `await`, чтобы убедиться, что действие отображается при помощи Vue. + +После мы можем проверить, что некоторые события произошли. В данном случае, что мы сгенерировали нужное событие. + +Давайте объединим эти два метода, чтобы проверить, что наша простая форма генерирует то, что ввел пользователь. + +```js +test('emits the input to its parent', async () => { + const wrapper = mount(Component) + + // установить значение + await wrapper.find('input').setValue('my@mail.com') + + // вызывать событие + await wrapper.find('button').trigger('click') + + // проверить, что `submit` событие сгенерировано, + expect(wrapper.emitted('submit')[0][0]).toBe('my@mail.com') +}) +``` + +## Продвинутый workflows + +Теперь, когда мы знаем основы, давайте углубимся в более сложные примеры. + +### Работа с различными элементами формы + +Мы увидели, как `setValue` работает с полями ввода, но он гораздо более универсальный, потому что он может установить значения на различные типы полей ввода. + +Давайте посмотрим на более сложную форму, которая имеет больше типов полей ввода. + +```vue +