В Element Plus формы реализуются через компоненты
<el-form> и <el-form-item>,
которые обеспечивают удобную структуру для валидации и управления
данными. Центральной частью тестирования является проверка
валидаторов, состояния полей, а также
обработчиков событий.
Форма в Element Plus строится по иерархии:
<el-form :model="formData" :rules="rules" ref="formRef">
<el-form-item label="Имя" prop="name">
<el-input v-model="formData.name"></el-input>
</el-form-item>
<el-form-item label="Email" prop="email">
<el-input v-model="formData.email"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm">Отправить</el-button>
</el-form-item>
</el-form>
model — объект с данными формы.rules — объект с правилами
валидации.ref — ссылка на форму для программного
вызова методов валидации.prop — ключ свойства в
model, которое будет валидироваться.Правила задаются объектом, где ключи соответствуют свойствам
model, а значения — массивы правил:
const rules = {
name: [
{ required: true, message: 'Имя обязательно', trigger: 'blur' },
{ min: 3, max: 20, message: 'От 3 до 20 символов', trigger: 'blur' }
],
email: [
{ required: true, message: 'Email обязателен', trigger: 'blur' },
{ type: 'email', message: 'Некорректный email', trigger: ['blur', 'change'] }
]
};
required — проверка обязательного
заполнения.min / max — ограничения
по длине.type — встроенные типы данных
(email, number, url).trigger — событие, при котором
срабатывает валидация (blur, change).Для автоматизации проверки форм доступны методы через
ref:
const formRef = ref(null);
// Проверка всей формы
formRef.value.validate((valid, fields) => {
if (valid) {
console.log('Форма валидна');
} else {
console.log('Ошибка валидации', fields);
}
});
// Проверка одного поля
formRef.value.validateField('email', (errorMessage) => {
if (errorMessage) {
console.log('Ошибка в поле email:', errorMessage);
}
});
// Сброс формы
formRef.value.resetFields();
Ключевые моменты:
validate(callback) — проверяет всю форму и возвращает
объект с ошибками.validateField(prop, callback) — проверяет конкретное
поле.resetFields() — очищает форму и сбрасывает ошибки
валидации.Тестирование должно покрывать все сценарии ввода:
required.type и
регулярных выражений.min и
max.blur,
change.Пример программного теста с использованием Jest и Vue Test Utils:
import { mount } from '@vue/test-utils';
import MyForm from '@/components/MyForm.vue';
test('валидирует поля формы', async () => {
const wrapper = mount(MyForm);
await wrapper.find('input[name="name"]').setValue('');
await wrapper.find('button').trigger('click');
const error = wrapper.find('.el-form-item__error');
expect(error.text()).toBe('Имя обязательно');
});
Element Plus поддерживает асинхронные проверки, например проверку уникальности email через API:
const rules = {
email: [
{
validator: async (rule, value) => {
if (!value) return Promise.reject('Email обязателен');
const exists = await checkEmailExists(value);
if (exists) return Promise.reject('Email уже зарегистрирован');
return Promise.resolve();
},
trigger: 'blur'
}
]
};
Promise.В формах с динамическими полями важно проверять:
prop к модели.<el-form-item
v-for="(item, index) in dynamicFields"
:key="index"
:prop="'field' + index"
>
<el-input v-model="item.value"></el-input>
</el-form-item>
Тестирование динамических форм включает проверку всех новых полей
после рендеринга и их взаимодействие с методами validate и
resetFields.
Element Plus автоматически применяет классы ошибок:
.is-error — контейнер поля с ошибкой..el-form-item__error — текст ошибки..is-success — валидное поле.Тестирование UI можно производить через проверку наличия этих классов
после вызова validate().
ref формы — упрощает
вызов валидации и сброса.blur,
change, input.Тестирование форм в Element Plus строится на комбинации валидаторов, событий и методов формы, что позволяет полностью контролировать корректность данных и визуальные состояния компонентов.