2017-09-03 1 views
0

Je voudrais tester un itinéraire qui ajoute des valeurs à la base de données.Test Laravel: DatabaseTransactions, l'annulation ne fonctionne pas

Voici mon test:

use DatabaseTransactions; 
public function testValues() 
{ 
    $this->withoutMiddleware(); // Disabling the auth middleware 


    $response = $this->json('POST', '/values', [ 

     'values' => 'THIS_IS_A_TEST', 

    ]); 
    $response 
     ->assertStatus(200); 



    $this->assertDatabaseHas('values', [ 
     'value' => 'THIS_IS_A_TEST' 
    ]); 
} 

La dernière affirmation est toujours tort, car la base de données est vide. Je pense que c'est parce que la dernière assertion est faite avant que les valeurs ne soient ajoutées à la base de données. Puis-je exécuter la seconde assertion seulement quand la première a été exécutée? Ou est-ce que je peux faire fonctionner ce test de manière synchrone?

Répondre

0

D'abord, je peux répondre à cette question Puis-je exécuter la deuxième assertion seulement quand la première a été exécutée? - Oui ...

J'espère que mon code fonctionnera avec vous.

DB::beginTransaction(); 
try { 
    $response = $this->json('POST', '/values', [ 
     'values' => 'THIS_IS_A_TEST', 
     ]); 
     $response 
      ->assertStatus(200); 



     $this->assertDatabaseHas('values', [ 
      'value' => 'THIS_IS_A_TEST' 
     ]); 

     //This success request 
} catch (\Exception $exception) { 
     DB::rollBack(); 

     //This failed request 

}