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
En matière de tests, Laravel
utilisation 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
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
) : SQLite
class HomePageTest extends TestCase { public function testHomePage() { // 创建一个测试用户,并保存 $user = factory(App\User::class)->create(); $this->actingAs($user)->visit('/home')->see('Dashboard'); } }
Laravel
config/database.php
connections
, c'est-à-dire , le tableau
'sqlite' => [ 'driver' => 'sqlite', 'database' => ':memory:', 'prefix' => '', ],
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. SQLite
SQLite
, remplacez la connexion à la base de données par la connexion PHPUnit
que vous venez de définir phpunit.xml
SQLite
<.>
<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>
au lieu de la connexion .env
lors de l'exécution du test. DB_CONNECTION=mysql
sqlite
mysql
TestCase.php
setUp 🎜>
public function setUp() { parent::setUp(); // 执行数据库迁移 $this->artisan('migrate'); }
Avantages et inconvénients de la solutionSQLite
:memory:
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.ini
memory_limit = 128M
Ce 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é !
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!