Laravel 13.31 Nouveauté Publié le

Vérifier qu'un mail ne part qu'une fois

assertSentOnce() et assertSentOnDemandOnce() : les faux Mail et Notification disent enfin « exactement une fois » en un mot.

Notions abordées : TestsMailNotifications

Nouveau dans Laravel 13.31. Mail::assertSent() passe dès qu'un mail est parti, qu'il y en ait un ou dix. Pour exiger un envoi unique, il fallait assertSentTimes(…, 1). Les faux Mail et Notification ont maintenant des assertions …Once.

Avant

Mail::assertSentTimes(CommandeConfirmee::class, 1);
Notification::assertSentOnDemandTimes(CommandeAFacturer::class, 1);

Depuis Laravel 13.31

Mail::assertSentOnce(CommandeConfirmee::class);
Notification::assertSentOnDemandOnce(CommandeAFacturer::class);

Il existe aussi assertQueuedOnce() pour les mails mis en file, et assertSentToOnce($destinataire, …) pour une notification envoyée à un modèle.

À faire

POST /api/commandes envoie une confirmation au client et prévient la comptabilité. Le test de tests/Feature/CommandeTest.php vérifie que les deux partent, mais pas qu'ils ne partent qu'une fois : un envoi en double passerait inaperçu. Renforcez-le avec les assertions …Once. Chaque mutant (un envoi dédoublé) doit faire échouer vos tests.

D'où vient la fonctionnalité : la pull request d'origine.