ホームページ  >  記事  >  バックエンド開発  >  Laravelデータベーステストを行う別の方法(SQLite)

Laravelデータベーステストを行う別の方法(SQLite)

不言
不言オリジナル
2018-07-13 15:21:323031ブラウズ

この記事では主に、Laravel データベース テスト (SQLite) を行うための別の方法を紹介しますが、これには一定の参考値がありますので、共有します。必要な友人は参考にしてください。

Laravel データベース テスト

テストに関しては、Laravel組み込み使用PHPUnitが非常に便利なソリューションを提供します。データベースの追加、削除、変更、クエリのテストでは、テスト終了後にデータベースをどのように元の状態に戻すかが非常に重要な問題となります。たとえば、ユーザー登録方法をテストするには、ユーザー レコードが必要です。はデータベースに挿入されますが、テストが完了した後は、このテスト ケースをデータベースに保存したくないのです。この問題を解決するために、Laravel は非常に便利なソリューションを提供します:

  • 移行を使用します: DatabaseMigrations

  • ##トランザクションを使用する:

    DatabaseTransactions

参考: https://laravel.com/docs/5.3/database-testing#resetting-the-database- after-each-test
別の解決策:

SQLite:memory:

Laravel のメモリ内データベースを使用します。提供されている 2 つのソリューションでも、データベースに対して読み取りおよび書き込み操作が実行されます。場合によっては、これを実行したくない場合もあります (たとえば、複数の人がオンライン開発データベースを共有している場合)。この場合、より洗練された方法を使用することもできます: SQLlite のロジックは実際には非常に単純です。テスト ケースを実行するときに、データベース接続を SQLite に置き換えます。

使用例

たとえば、次のテスト クラスがあります (この例は代表的なものではなく、問題を説明するためにのみ使用されており、

SQLite## であると想定されています) # はこのマシンにインストールされています): <pre class="brush:php;toolbar:false">class HomePageTest extends TestCase {          public function testHomePage()      {         // 创建一个测试用户,并保存         $user = factory(App\User::class)-&gt;create();         $this-&gt;actingAs($user)-&gt;visit('/home')-&gt;see('Dashboard');     } }</pre>

    まず、
  • Laravel

    データベース構成ファイル、つまり connections 配列に追加します。 config/database.php の新しいデータベース接続

    'sqlite' => [
        'driver' => 'sqlite',
        'database' => ':memory:',
        'prefix' => '',
    ],
  • ここでの非常に重要なパラメータは
'database' => ':memory:'#です##,

:memory:データベースは SQLite に組み込まれたインメモリ データベースです。テスト ケースが実行されるたびに、新しいデータベースがメモリ内に作成され、テストが完了し、データベース接続が閉じられると自動的にクリアされます。パフォーマンスが優れています。分離され、メモリ内にあるため、非常に高速です。これらの機能はテストに非常に便利です。これも非常に重要な理由です。テスト ライブラリとして SQLite データベースを選択します。詳しい説明については、ここをクリックしてください。

次に、
    PHPUnit
  • の構成ファイルを変更する必要があります。

    phpunit.xml で、データベース接続を SQLite に変更します。ちょうど定義された Connection

    <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>
    これは、
  • .env
で定義されたデータベース接続

DB_CONNECTION=mysql をオーバーライドし、フレームワークにtest 場合によっては、mysql 接続の代わりに sqlite 接続を使用します。

最後に、テスト ケースを実行する前にデータベースの移行を実行し、
    setUp
  • メソッドをテスト クラスの基本クラス (##) に追加する必要があります。 #TestCase.php

    <pre class="brush:php;toolbar:false">public function setUp() {     parent::setUp();     // 执行数据库迁移      $this-&gt;artisan('migrate'); }</pre>このようにして、各テスト ケースが実行される前に、すべての移行が # の

    :memory:
  • データベースに実行されます。 ##SQLite
ロジックに必要なビジネス データ テーブルを生成します。

ソリューションの長所と短所

このソリューションの重要なポイントは、組み込みメモリ データベース

SQLite

    を使用することです。 Memory:
  • なので、比較的高速で、分離性が高く、開発データベースには影響を与えません。

    もちろん、このソリューションには欠点もあります。プロジェクト データベースが巨大で、多数のデータ テーブルや移行ファイルがある場合、大量のメモリを消費します。テスト中にメモリが不足し、テストが中断される可能性があります。このとき、PHP に適切なメモリを割り当て、php.ini

  • memory_limit = 128M
  • の設定を変更する必要があります。上記は次のとおりです。この記事の内容全体が皆さんの学習に役立つことを願っています。関連コンテンツの詳細については、PHP 中国語 Web サイトに注目してください。

    関連する推奨事項:

Laravel.log ファイルの書き込みの問題を解決する方法

<a title="如何解决Laravel.log 文件写入的问题" href="http://www.php.cn/php-weizijiaocheng-406465.html" target="_blank">Laravel 開発環境展開 Homestead のインストールと構成プロセス (Windows システム)</a>

Laravel ルーティング (ルーター) のグラフィックとテキストの説明

以上がLaravelデータベーステストを行う別の方法(SQLite)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。