Les tests de composants réagis efficaces sont cruciaux. La bibliothèque de tests React (RTL) simplifie ce processus, mettant l'accent sur les tests d'interaction utilisateur. Cet article présente cinq techniques RTL avancées pour écrire des tests unitaires plus efficaces et maintenables.
écran
pour les requêtes Évitez les requêtes destructuration directement à partir de render ()
. L'utilisation de l'objet
améliore constamment la lisibilité et la clarté.
Avantages:
Exemple:
Au lieu de:
const { getByText } = render();
expect(getByText(/click me/i)).toBeInTheDocument();
Utiliser:
render();
expect(screen.getByText(/click me/i)).toBeInTheDocument();
Cette approche maintient la cohérence dans les suites de test plus grandes.
findby
pour les opérations asynchrones pour les composants qui rendent les éléments de manière asynchrone (par exemple, après les appels d'API), utilisez findby
requêtes au lieu de fally
. Cela garantit que les assertions s'exécutent uniquement après le rendu des éléments.
Avantages:
Exemple:
// Component asynchronously fetches and displays a username
render( );
const userName = await screen.findByText(/john doe/i);
expect(userName).toBeInTheDocument();
Alternativement, waitFor
peut obtenir des résultats similaires, mais findby
est préféré pour sa fonctionnalité combinée getby
et waitfor
. Évitez de les utiliser ensemble.
render( );
await waitFor(() => {
expect(screen.getByText(/john doe/i)).toBeInTheDocument();
});
dans
pour un ciblage précis Lors du ciblage des éléments dans des conteneurs spécifiques, l'utilitaire dans
empêche les correspondances ambiguës.
Avantages:
Exemple:
render(
);
const nameLabel = within(screen.getByRole('group')).getByLabelText(/Name/i);
expect(nameLabel).toBeInTheDocument();
Cette approche ciblée entraîne des tests plus propres et plus contextuellement pertinents.
userevent
pour des interactions réalistes tandis que fireevent
est fonctionnel, userevent
fournit une simulation d'interaction utilisateur plus réaliste, y compris la frappe, le clic et le tabbing.
Avantages:
Exemple:
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();
Cette approche garantit que les tests reflètent avec précision le comportement de l'utilisateur du monde réel.
debug ()
pour l'inspection DOM La méthode debug ()
est inestimable pour le dépannage des échecs de test en imprimant la structure Dom à la console.
Avantages:
Exemple:
render( );
screen.debug(); // Logs the DOM structure
Cibler des éléments spécifiques est également possible:
const section = screen.getByRole('region');
within(section).debug();
Conseils supplémentaires:
. TohavetextContent ()
ou . TohaveAttribute ()
pour des affirmations précises. cleanup ()
dans aprèsach
empêche les fuites DOM. Conclusion:
RTL priorise les tests centrés sur l'utilisateur. En appliquant ces techniques, vous créez des tests plus propres, plus fiables et maintenables, améliorant votre flux de travail de développement global. Embrassez ces stratégies pour améliorer vos pratiques de test de réaction.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3