サーチ…


前書き

テスト可能なコードを書くことは、堅牢で、維持可能で、機敏なプロジェクトを構築する上で重要な部分です。 PHPの最も広く使用されているテストフレームワーク、 PHPUnitのサポートはLaravelに組み込まれています。 PHPUnitはphpunit.xmlファイルを使用して設定されますphpunit.xmlファイルはすべての新しいLaravelアプリケーションのルートディレクトリにあります。

testsディレクトリには、ルートディレクトリにも、アプリケーションの各部分をテストするためのロジックを保持する個々のテストファイルが含まれています。もちろん、アプリケーションをビルドするときに開発者としてこれらのテストを書くのはあなたの責任ですが、LaravelにはExampleTest.phpというサンプルファイルが含まれています。

<?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testBasicExample()
    {
        $this->visit('/')
             ->see('Laravel 5');
    }
}

testBasicExample()メソッドでは、サイトのインデックスページにアクセスして、そのページのどこかにLaravel 5というテキストが表示されていることを確認します。テキストが存在しない場合、テストは失敗し、エラーが生成されます。

ミドルウェアなしで、新しいデータベースでテスト

職人がテストを実行する前に新しいデータベースを移行させるには、 use DatabaseMigrations 。また、Authのようなミドルウェアを避けたい場合は、 use WithoutMiddleware

<?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;

class ExampleTest extends TestCase
{
    use DatabaseMigrations, WithoutMiddleware;

    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testExampleIndex()
    {
        $this->visit('/protected-page')
         ->see('All good');
    }
}

複数のデータベース接続のためのデータベーストランザクション

DatabaseTransactions特性により、データベースはテスト中にすべての変更をロールバックできます。複数のデータベースをロールバックする場合は、 $connectionsToTransactプロパティを設定する必要があります

use Illuminate\Foundation\Testing\DatabaseMigrations;

class ExampleTest extends TestCase
{
     use DatabaseTransactions;

     $connectionsToTransact =["mysql","sqlite"] //tell Laravel which database need to rollBack

    public function testExampleIndex()
    {
        $this->visit('/action/parameter')
         ->see('items');
    }
}

メモリ内のデータベースを使用してセットアップをテストする

セットアップ後、テストフレームワーク(PHPUnit)は:memory:データベースを使用します。

config / database.php

'connections' => [

    'sqlite_testing' => [
        'driver'   => 'sqlite',
        'database' => ':memory:',
        'prefix'   => '',
    ],
    .
    .
    .

./phpunit.xml

    .
    .
    .
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="APP_URL" value="http://example.dev"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
        <env name="DB_CONNECTION" value="sqlite_testing"/>
    </php>
</phpunit>

構成

phpunit.xmlファイルはテスト用のデフォルト設定ファイルであり、PHPUnitでテストするために既に設定されています。

デフォルトのテスト環境APP_ENVは、 arrayがキャッシュ・ドライバCACHE_DRIVERであるtestingとして定義されていtesting 。この設定では、テスト中にデータ(セッション/キャッシュ)は保持されません。

ホームステッドのような特定の環境に対してテストを実行するには、デフォルトを次のように変更します。

<env name="DB_HOST" value="192.168.10.10"/>
<env name="DB_DATABASE" value="homestead"/>
<env name="DB_USERNAME" value="homestead"/>
<env name="DB_PASSWORD" value="secret"/>

または、一時的なメモリデータベースを使用するに

<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>

最後に、 Laravelのドキュメントを覚えておいてください。

テストを実行する前に、 config:clear Artisanコマンドを使って設定キャッシュをconfig:clearてください!



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow