Maison  >  Article  >  développement back-end  >  Une autre façon de tester la base de données Laravel (SQLite)

Une autre façon de tester la base de données Laravel (SQLite)

不言
不言original
2018-07-13 15:21:323046parcourir

Cet article présente principalement une autre méthode pour effectuer des tests de base de données Laravel (SQLite). Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

Tests de base de données Laravel

.

En matière de tests, Laravelutilisation intégréePHPUnit fournit une solution très pratique. Pour le test d'ajout, de suppression, de modification et d'interrogation de base de données, un problème très important à résoudre est de savoir comment restaurer l'apparence d'origine de la base de données une fois le test terminé. Par exemple, pour tester une méthode d'enregistrement d'utilisateur, un enregistrement d'utilisateur. doit être inséré dans la base de données, mais une fois le test terminé, nous ne voulons pas que ce scénario de test soit enregistré dans la base de données. Afin de résoudre ce problème, Laravel propose une solution très pratique :

  • Utiliser la migration : DatabaseMigrations

  • Utiliser la transaction : DatabaseTransactions

Référence : https://laravel.com/docs/5.3/database-testing#resetting-the-database-after-each-test

Aussi Une solution : utilisez la base de données en mémoire de SQLite. Les deux solutions proposées par :memory:

Laravel continuent de lire et d'écrire des opérations dans la base de données, ce que vous ne voudrez peut-être pas faire parfois (par exemple Plusieurs personnes partagent une base de données de développement en ligne). À ce stade, vous pouvez également utiliser une manière plus élégante : SQLlite. La logique est en fait très simple : lors de l'exécution du scénario de test, remplacez la connexion à la base de données par . SQLite

Exemple d'utilisation

Par exemple, nous avons la classe de test suivante (cet exemple n'est pas représentatif, il sert uniquement à illustrer le problème, et on suppose que la machine a été installée

) : SQLite

class HomePageTest extends TestCase {
    
    public function testHomePage() 
    {
        // 创建一个测试用户,并保存
        $user = factory(App\User::class)->create();
        $this->actingAs($user)->visit('/home')->see('Dashboard');
    }
}
  • Ajoutez d'abord une nouvelle connexion à la base de données

    Laravelconfig/database.phpconnections, c'est-à-dire , le tableau

  • de
🎜>Un paramètre très important ici est
'sqlite' => [
    'driver' => 'sqlite',
    'database' => ':memory:',
    'prefix' => '',
],
La base de données

est une base de données mémoire intégrée à 'database' => ':memory:' Chaque fois qu'un scénario de test est exécuté, une nouvelle base de données sera. créé en mémoire et fermé une fois le test terminé. Une fois la base de données connectée, elle est automatiquement effacée et est très rapide car ces fonctionnalités sont très pratiques pour les tests. pour nous de choisir la base de données :memory: comme raison de la bibliothèque de test. Pour une explication détaillée, cliquez ici. SQLiteSQLite

    Ensuite, vous devez modifier le fichier de configuration de
  • Dans

    , remplacez la connexion à la base de données par la connexion PHPUnit que vous venez de définir phpunit.xmlSQLite<.>

  • Cela remplace la connexion à la base de données
définie dans
<php>
    <env name="APP_ENV" value="testing"/>
    <env name="CACHE_DRIVER" value="array"/>
    <env name="SESSION_DRIVER" value="array"/>
    <env name="QUEUE_DRIVER" value="sync"/>
    
    <!-- 将数据库连接改为刚刚定义的SQLite连接 -->
    <env name="DB_CONNECTION" value="sqlite" />
</php>
et indique au framework d'utiliser la connexion

au lieu de la connexion .env lors de l'exécution du test. DB_CONNECTION=mysqlsqlitemysql

Enfin, vous devez effectuer la migration de la base de données avant d'exécuter le scénario de test, et ajouter la
    méthode
  • TestCase.phpsetUp 🎜>

    De cette manière, avant l'exécution de chaque scénario de test, toutes les migrations seront effectuées vers la
  • base de données de
pour générer les tables de données nécessaires à la logique métier.
public function setUp()
{
    parent::setUp();
    // 执行数据库迁移 
    $this->artisan('migrate');
}

Avantages et inconvénients de la solutionSQLite:memory:

Le point clé de cette solution est d'utiliser une base de données en mémoire intégrée

de
    , donc il est plus rapide et a une bonne isolation, n'aura aucun impact sur notre base de données de développement.
  • SQLite:memory:Bien sûr, cette solution présente également des inconvénients. Si la base de données du projet est énorme et contient un grand nombre de tables de données ou de fichiers de migration, elle consommera beaucoup de mémoire lors de l'exécution. test, la mémoire peut être insuffisante, ce qui entraîne l'interruption du test. À ce stade, vous devez allouer la mémoire appropriée à PHP et modifier la configuration dans

  • php.inimemory_limit = 128MCe qui précède est l'intégralité du contenu de cet article, j'espère que ce sera le cas. utile à l'apprentissage de chacun. Plus Veuillez faire attention au site Web PHP chinois pour le contenu associé !

  • Recommandations associées :

Processus d'installation et de configuration de la propriété de déploiement de l'environnement de développement Laravel (système Windows) <a title="如何解决Laravel.log 文件写入的问题" href="http://www.php.cn/php-weizijiaocheng-406465.html" target="_blank">如何解决Laravel.log 文件写入的问题</a>

Explication graphique détaillée du routage (routeur) de Laravel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn