эффективное тестирование компонентов реагирования имеет решающее значение. Библиотека тестирования React (RTL) упрощает этот процесс, подчеркивая тестирование взаимодействия с пользователем. В этой статье представлены пять передовых методов RTL для написания более эффективных и обслуживаемых модульных тестов.
screen
для запросов избегайте разрушения запросов непосредственно из render ()
. Использование объекта Screen
последовательно улучшает читаемость и ясность.
Преимущества:
Пример:
Вместо:
const { getByText } = render();
expect(getByText(/click me/i)).toBeInTheDocument();
Использовать:
render();
expect(screen.getByText(/click me/i)).toBeInTheDocument();
]
Этот подход поддерживает согласованность в более крупных испытательных люксах.
] findby
для асинхронных операций для компонентов рендеринг элементов асинхронно (например, после вызовов API), используйте findby
запросы вместо getby
. Это гарантирует, что утверждения работают только после рендеринга элементов.
Преимущества:
Пример:
// Component asynchronously fetches and displays a username
render( );
const userName = await screen.findByText(/john doe/i);
expect(userName).toBeInTheDocument();
Альтернативно, waitfor
может достичь аналогичных результатов, но findby
предпочтительнее для его комбинированной функции getby
и watfor
. Избегайте их вместе.
render( );
await waitFor(() => {
expect(screen.getByText(/john doe/i)).toBeInTheDocument();
});
inea
для точного таргетинга При нацеливании на элементы в определенных контейнерах внутри
предотвращает неоднозначные совпадения.
Преимущества:
Пример:
render(
);
const nameLabel = within(screen.getByRole('group')).getByLabelText(/Name/i);
expect(nameLabel).toBeInTheDocument();
]
этот целевой подход приводит к более чистым, более контекстуально релевантным тестам.
] useRevent
для реалистичных взаимодействий while fireVent
является функциональным, useRevent
обеспечивает более реалистичное моделирование взаимодействия пользователя, включая набор, щелчок и вкладки.
Преимущества:
Пример:
import userEvent from '@testing-library/user-event';
render( );
const emailInput = screen.getByLabelText(/email/i);
const passwordInput = screen.getByLabelText(/password/i);
const submitButton = screen.getByRole('button', { name: /submit/i });
await userEvent.type(emailInput, '[email protected]');
await userEvent.type(passwordInput, 'password123');
await userEvent.click(submitButton);
expect(screen.getByText(/welcome/i)).toBeInTheDocument();
]
Этот подход гарантирует, что тесты точно отражают реальное поведение пользователя.
] debug ()
для Dom Inspection Метод неоценим для устранения неисправностей испытаний путем печати структуры DOM в консоли.
Преимущества:
]Пример:
render( );
screen.debug(); // Logs the DOM structure
также возможна нацеливание конкретных элементов: ]
const section = screen.getByRole('region');
within(section).debug();
]
Дополнительные советы: ]
Clean Up:
, пока RTL обрабатывает очистку, явно вызывая cleanup ()
в Jest Integration:
рассмотрите возможность использования Jest с плагинами для целевого выполнения теста и IDE-интегрированных отчетов о покрытии. ]
]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3