Si vous utilisez PHP et plus spécifiquement un framework comme Laravel, vous avez pu être confronté.e.s à des problèmes concernant la date et l’heure renvoyées par Carbon, lors de l’exécution de vos tests unitaires. En effet, idéalement, lors de l’utilisation de la méthode Carbon::now(), vous souhaiteriez obtenir une valeur qui ne change jamais. Voyons comment résoudre ce problème.
La librairie Carbon est utilisée par de nombreux frameworks tels que Laravel. Elle offre tout un tas de fonctions pour vous aider à manipuler les dates et les heures. La documentation en ligne est très complète.
Au moment d’insérer une ligne dans la base de données, Laravel utilise la méthode now() de la librairie afin de remplir les champs « created_at » et « updated_at« . Imaginons que vous écriviez un test unitaire, qui effectue une assertion sur la date de création. Vous souhaiteriez donc obtenir une valeur qui restera fixe tout au long de votre test.
Dans ce cas, vous pouvez utiliser la méthode Carbon::setTestNow() :
Carbon::setTestNow("2024-01-03 13:55:50");
Lorsque vous vérifiez alors le contenu dans votre base de données, vous pouvez réutiliser la date ci-dessus.
$this->assertDatabaseHas("ma_table", [
"id" => 1,
"created_at" => "2024-01-03 13:55:50"
]);
Notez que si vous utilisez le micro framework Lumen, vous devrez utiliser la méthode seeInDatabase().
Attention : dans un test, la modification de la date et heure renvoyées par Carbon peut avoir une incidence sur les tests suivants. Vous pouvez dès lors appeler Carbon::setTestNow() sans paramètre dans la méthode setUp() de la classe TestCase. Ainsi le comportement par défaut sera initialisé avant chaque test.