par la documentation Lumen 5.3:Quelle est la différence entre les migrations de bases de données et les transactions lors des tests unitaires dans Lumen?
En utilisant Migrations
Une option consiste à rollback la base de données après chaque test et migrer avant le prochain test. Lumen fournit un trait simple DatabaseMigrations qui le gérera automatiquement pour vous. Il suffit d'utiliser le trait sur votre classe de test:<?php use Laravel\Lumen\Testing\DatabaseMigrations; use Laravel\Lumen\Testing\DatabaseTransactions; class ExampleTest extends TestCase { use DatabaseMigrations; /** * A basic functional test example. * * @return void */ public function testBasicExample() { $this->get('/foo'); } }
Utilisation de transactions
Une autre option consiste à envelopper tous les cas de test dans une transaction de base de données. Encore une fois, Lumen fournit un trait DatabaseTransactions pratique qui se chargera automatiquement ceci:
<?php use Laravel\Lumen\Testing\DatabaseMigrations; use Laravel\Lumen\Testing\DatabaseTransactions; class ExampleTest extends TestCase { use DatabaseTransactions; /** * A basic functional test example. * * @return void */ public function testBasicExample() { $this->get('/foo'); } }
Comme vous pouvez voir le texte d'explication est presque identique et l'exemple de code est exactement la même à l'exception de l'utilisation du trait . Donc, il est clair pour moi que la différence est complètement dans la façon dont le cadre gère les tests.
Qu'est-ce que ceux-ci font différemment et quand préférez-vous l'un par rapport à l'autre?
Si une différence concerne le pilote de base de données, j'utilise MYSQL.
Ainsi, un résumé de compromis serait-il que les migrations sont plus sûres mais plus lentes et que les transactions sont plus rapides, mais que techniquement, elles fonctionnent sur des données en direct, et ensuite que les transactions pourront être annulées à la fin? –