4

laravelに「データベースにこの挿入をすべて作成しますが、すべてのテストが終了したら、データベースをリセットせずにすべての挿入を削除します」のようなsetUp()およびtearDown()メソッドを作成する方法はありますか?

次のようなテストを行う必要があります。

/** @test */
public function testRegistration(){

   $account = [
    'name'     => 'test',
    'email'    => 'test@gmail.com',
    'password' => '123451234'
    ];

    $this->visit('/register')
         ->type($account['name'],'name')
         ->type($account['email'],'email')
         ->type($account['password'],'password')
         ->type($account['password'],'password_confirmation')
         ->press('Register')
         ->seePageIs('/home');
}

最初は実行できますがphpunit、もう一度実行すると、もちろん、既にデータベースにあるため、この電子メールを使用できないというエラーが返されます。

問題は、データベースを単純にリセットできないことです。データベースに既に 12.000 行が挿入されており、アプリケーションにこれらの 12.000 行を挿入する必要があるため、test_database を作成できません。

使用できる情報は見つかりませんでした。「migration::refresh というテスト コールを作成し、テーブルに再度データを入力するために 4 分間送信してください」という情報しか見つかりませんでしたが、より良い情報を見つけることができると確信しています。解決!

また、setUp() メソッドをどこに置き、どこで呼び出すのですか?

ありがとうございました。

4

1 に答える 1

1

thisおよび this documentation (トランザクションの操作)を参照してください。

この特性は、トランザクションでデフォルトのデータベース接続のみをラップします。

つまり、挿入は「偽装」されるため、毎回削除する必要はありません。

別のオプションは、行ったすべての挿入を削除する別のテストを追加することです。

User::where('name', 'test')->where('email','test@gmail.com')->delete();
于 2016-11-18T23:48:48.967 に答える