describe и it — фундаментальные
строительные блоки модульных тестов в экосистеме JavaScript. При
тестировании компонентов Vue с использованием Vue Test Utils именно
через эти конструкции формируется структура тестов, логика группировки
сценариев и читаемость тестового кода.
describe используется для логического объединения тестов
в группы. В контексте Vue Test Utils чаще всего один блок
describe соответствует одному Vue-компоненту или одному
аспекту его поведения.
describe('BaseButton.vue', () => {
// тесты компонента
})
describe не выполняет проверок, а
задаёт контекст.describe позволяют формировать иерархию
сценариев.Корректная структура describe отражает архитектуру
компонента и его ответственности.
describe для сценариев поведенияКомпоненты Vue редко ограничиваются одним сценарием. Вложенные
describe позволяют явно разделять условия и состояния.
describe('BaseButton.vue', () => {
describe('когда передан prop disabled', () => {
// тесты для disabled
})
describe('когда кнопка активна', () => {
// тесты активного состояния
})
})
В отчётах тестов формируется читаемая цепочка:
BaseButton.vue → когда передан prop disabled → ...
it как единица
проверкиit описывает один конкретный ожидаемый
результат. Каждый блок it должен проверять одно
логическое утверждение.
it('рендерит текст из slot', () => {
const wrapper = mount(BaseButton, {
slots: {
default: 'Отправить'
}
})
expect(wrapper.text()).toBe('Отправить')
})
ititПлохой признак — несколько expect без логической связи
или проверка разных сценариев в одном тесте.
describe и
itdescribe формирует контекст, it —
утверждение внутри этого контекста. Вместе они образуют читаемую
спецификацию поведения компонента.
describe('ModalWindow.vue', () => {
describe('при открытии', () => {
it('отображается на странице', () => {
// expect
})
it('блокирует прокрутку body', () => {
// expect
})
})
})
Такой код читается как связный текст и не требует дополнительных комментариев.
describeVue Test Utils активно используется совместно с Jest или Vitest, что позволяет применять хуки жизненного цикла тестов.
beforeEach и
инициализация компонентаdescribe('UserCard.vue', () => {
let wrapper
beforeEach(() => {
wrapper = mount(UserCard, {
props: {
name: 'Иван'
}
})
})
it('отображает имя пользователя', () => {
expect(wrapper.text()).toContain('Иван')
})
})
Ключевые моменты:
beforeEach выполняется перед каждым
itХуки наследуются от родительского describe и могут быть
переопределены.
describe('InputField.vue', () => {
let wrapper
beforeEach(() => {
wrapper = mount(InputField)
})
describe('с переданным value', () => {
beforeEach(() => {
wrapper.setProps({ modelValue: 'test' })
})
it('отображает значение в input', () => {
expect(wrapper.find('input').element.value).toBe('test')
})
})
})
it и
обновления DOMVue обновляет DOM асинхронно, поэтому it часто работает
с async/await.
it('обновляет текст после клика', async () => {
await wrapper.find('button').trigger('click')
expect(wrapper.text()).toContain('Готово')
})
Важно, что асинхронность относится к содержимому
it, а не к describe.
Качество тестов во многом определяется именами describe
и it.
describe — существительное или контекстit — глагольное утверждениеitПример корректной структуры:
describe('Notification.vue', () => {
describe('при типе error', () => {
it('имеет красный фон', () => {
// expect
})
})
})
describe и itСлишком глубокая иерархия усложняет навигацию и поддержку.
describe
└─ describe
└─ describe
└─ it
Допустима глубина 2–3 уровня, дальше структура теряет ценность.
describedescribe не должен содержать:
Вся исполняемая логика размещается в it или хуках.
.only и
.skipВо время разработки тестов допустимо временное управление выполнением.
it.only('проверяет отображение заголовка', () => {
// тест
})
describe.skip('устаревшее поведение', () => {
// тесты
})
В финальном коде такие модификаторы отсутствуют, так как они искажают полноту тестового покрытия.
describe
и it как документация компонентаХорошо написанные тесты Vue Test Utils выполняют двойную функцию:
По структуре describe и формулировкам it
можно восстановить требования к компоненту без изучения его
реализации.