2017-01-20 6 views
0

私は、DatabaseTransactions特性を使用してLaravelシステムをテストしようとしています。問題は、TestCaseのすべてのテストが実行された後にのみトランザクションをロールバックすることです。 TestCaseのすべてのテストに対して新しいデータベースインスタンスを作成することは可能ですか?各テスト後のDatabaseTransactions

このテストケースでは、すべて緑色が返されることがありますが、時々そうではありません。テストが実行されると、すべてが正常に実行されますが、順序が逆になったときに最初に1つのリードが作成されたため、最初のテストが失敗します。私に何ができる?

public function testPotentialLeads() 
{ 
    factory(Lead::class)->create(['lead_type' => LeadType::POTENTIAL]); 
    factory(Lead::class)->create(); 
    factory(Lead::class)->create(); 

    $potential_leads = Lead::potentials()->get(); 

    $this->assertEquals(1, $potential_leads->count()); 
    $this->assertEquals(3, Lead::all()->count()); 
} 

public function testAnotherLeadFunction() 
{ 
    $lead = factory(Lead::class)->create(); 

    $this->assertTrue(true); 
} 
+0

'setUp()'メソッドを使うことができます。 – yivi

答えて

0

を登録する代わりにafterApplicationCreatedbeforeApplicationDestroyedメソッドを使用して、私は私のエラーを検出しました。私はこれをやっていたときので、それは失敗しました:

factory(Lead::class)->create(['lead_type' => LeadType::POTENTIAL]); 
factory(Lead::class)->create(); 
factory(Lead::class)->create(); 

$potential_leads = Lead::potentials()->get(); 

$this->assertEquals(1, $potential_leads->count()); 
$this->assertEquals(3, Lead::all()->count()); 

2点のリードは、(モデル工場を通じて)ランダムLeadTypeで生成されていたので、より多くの潜在的なリード線が作成されたいくつかの試みがありました。

1
  1. まず第一に、本当にこのテストイマイチテスト:$this->assertTrue(true);。あなたがリードが作成されたかどうかをテストしたい場合は、あなたが特定の順序でユニットテストを実行したい場合$this->assertTrue($lead->exists());

  2. は、あなたが@dependsアノテーションを使用することができ、使用している必要があります

  3. DatabaseTransactions特徴はロールバックを行いますすべてのテストの後ではなく、すべてのテストの後

  4. あなたが移行して、トランザクションにそれらをラップするのではなく前に、すべてのテスト後にロールバックを移行する場合DatabaseMigrations形質を使用する場合があります

  5. カスタムセットアップとティアダウンメソッドを使用したい場合は、コールバックに

+0

1.私は知っています。私はちょうど何が起こるか見るためにダミーのテストを書いた。 3.なぜテストが時々真実を返し、時には偽であるのか? – Alan

関連する問題