2016-11-25 1 views
0

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.

Répondre

2

DatabaseMigrations migre la base de données lorsque vous exécutez le test, puis annule la restauration de la base de données lorsque le test est terminé.

DatabaseTransactions utilise des transactions. Toute donnée insérée à partir de votre base de données sera restaurée après le test.

La différence entre les deux est DatabaseMigrations utilise les migrations (migre vers la migration de votre base de données puis rouler en arrière après le test), tandis que DatabaseTransactions utilise la transaction (données insérées à partir de la base de données sont rolledback)

Source: https://mattstauffer.co/blog/better-integration-testing-in-laravel-5.1-databasemigrations-databasetransactions-and-withoutmiddleware

+1

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? –

0

Transaction dans SQL vous donne la possibilité d'annuler l'insertion, de valider l'insertion que vous auriez à faire explicitement en utilisant COMMIT.

Ce qui vous donne la possibilité de faire les tests unitaires sans modifier la base de données elle-même.

Même chose pour les migrations, mais elles ne vous donneront pas le contrôle sur chaque transaction.