11

単体テストを実行し、セットアップ中にデータベースを作成しようとしています。何らかの理由でエラーが発生していますUnknown database 'coretest'。手動でデータベースを作成してテストを実行すると、Can't create database 'coretest'; database exists.

drop database ステートメントは、create database で機能するようになりました。

これが私のsetUPとtearDownメソッドです:

class TestCase extends Illuminate\Foundation\Testing\TestCase {
    /**
     * Default preparation for each test
     */

    public function setUp() {
        parent::setUp();

        DB::statement('create database coretest;');
        Artisan::call('migrate');
        $this->seed();
        Mail::pretend(true);
    }

    public function tearDown() {
        parent::tearDown();
        DB::statement('drop database coretest;');
    }
}
4

5 に答える 5

2

基本的にlaravelのデータベース構成ファイルを再度起動する必要があるため、ネオアセティックが最良の答えです。

したがって、巧妙なハックは、データベースを削除した後に再度作成することです。config/database に触れる必要はありません。

public function setUp() {
    parent::setUp();

    Artisan::call('migrate');
    $this->seed();
    Mail::pretend(true);
}

public function tearDown() {
    parent::tearDown();

    DB::statement('drop database coretest;');
    DB::statement('create database coretest;');
}
于 2015-11-19T15:00:51.653 に答える
0

Laravel 5 では、移行を内部的に Laravel プロセスに呼び出すことができ、外部コマンドを使用するよりもかなり高速に実行されます。

TestCase::setUp (またはそれ以前) では、移行コマンドを次のように呼び出します。

$kernel = app('Illuminate\Contracts\Console\Kernel');
$kernel->call('migrate');
于 2015-08-30T05:42:37.473 に答える