У меня есть компонент ввода.Он может отображаться и вести себя 6 различными способами:
Ввод:
- Ввод текста
- Ввод текста с начальным украшением
- Emailinput
- Ввод электронной почты с начальным украшением
- Ввод пароля с конечным украшением
- Ввод пароля с начальным и конечным украшением
Вместоповторяя каждый тест 6 раз, я бы хотел использовать description.each (), а не прямую description ().
Вход также будет отображаться и вести себя по-разному в зависимости от взаимодействия пользователя с входом.
Например, все пользователи начнут со следующего потока:
- Первоначальный рендеринг ввода
- Фокус в
Пользователь может затем следоватьпоток, такой как:
- Ввод неверного значения ввода
- Фокусировка
- Фокусировка в
- Ввод допустимого ввода (тот же результат, что и шаг1. ниже)
- Сфокусируется (тот же результат, что и на шаге 2 ниже)
Или другойтам поток:
- Ввод правильного значения ввода
- Фокусировка
- Фокусировка в
- Ввод недопустимого ввода или удаление допустимого ввода (тот же результатas вводит недопустимый ввод)
- Сфокусируется (тот же результат, что и при фокусировке с неверным вводом)
Или другой поток:
- Не вводит ввод
- Фокусировка (тот же результат, что и при исходном рендеринге ввода)
Вместо того, чтобы тестировать каждый шаг по отдельности, было бы лучше настроить тесты без очистки, чтобы я мог вкладывать тесты длякаждая стадия потока?
Например:
describe.each`...`("Initial render", ({...}) => {
it("renders as snapshot", () => ....)
describe("Then users focuses in", () => {
fireEvent.focusIn(input)
it("renders as snapshot", () => ....)
describe("Then user enters valid input", () => {
fireEvent.change(input, { target: { value: "Valid input" }})
it("renders as snapshot", () => ....)
describe("Then user focuses out", () => {
fireEvent.focusOut(input)
it("renders as snapshot", () => ....)
describe("Then user enters an invalid or no input", () => {
fireEvent.focusIn(input)
fireEvent.change(input, { target: { value: "" }})
it("renders as snapshot", () => ....)
})
})
})
describe("Then user enters an invalid input", () => {
fireEvent.change(input, { target: { value: "$%^@!" }})
it("renders as snapshot", () => ....)
describe("Then user focuses out", () => {
fireEvent.focusOut(input)
it("renders as snapshot", () => ....)
describe("Then user enters an valid input", () => {
fireEvent.focusIn(input)
fireEvent.change(input, { target: { value: "Valid input" }})
it("renders as snapshot", () => ....)
})
})
})
describe("Then user doesn't enter any input and focuses out", () => {
fireEvent.focusOut(input)
it("renders as snapshot", () => ....)
})
})
}
Если я делаю это таким образом, как правильно настроить и отключить каждый тест, т. е. с beforeEach(cleanup)
, afterEach(cleanup)
, beforeAll(cleanup)
и / или afterAll(cleanup)
, чтобы он работал с описанием .each ()?