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.