2016-09-05 71 views
5

Bu konuyla ilgili olarak hazırladığım her şey, Eloquent ünitesini, henüz Laravel içinde test edilen üniteyi test etmemelisiniz anlamına gelir.Laravel 5'e yerleştirilen Eloquent model kaydını nasıl test edebilirim?

Ancak bu durumda başka bir sınıfa sahibim, bu bir Eloquent model değil, ancak Eloquent model kaydını veritabanına ekliyor. Bu sınıfa ünite testi yapmak istiyorum. Örneğin

:

public function methodIWantToTest() 
{ 
    $record = new User(); 

    $user->name = 'Bob'; 
    $user->email = '[email protected]'; 

    $user->save(); 
} 

nasıl birim testi bu yöntem ki? Ben denediğimde aslında veritabanına ekler. Tabii ki veritabanına gitmek zorunda kalmadan bunu yapabilmem gerekir mi? Eğer seeInDatabase() kullanmak istemiyorsanız

+0

değil bir çözüm, ancak geçici bir çözüm - Eğer 'Illuminate \ Vakfı \ Test \ DatabaseTransactions kullanabilirsiniz;' üstündeki senin test sınıfı Daha sonra kayıt yine de DB'ye eklenir, ancak test tamamlandıktan sonra geri alınacak bir işleme sarılır. –

cevap

5

belki denemelisiniz:

$mock = Mockery::mock('User'); 
$mock->shouldReceive('save')->once()->andReturn(true); 
$this->assertTrue(methodIWantToTest($mock)); 
+0

Kaydetme çağrılmamdan şikayet ediyor. Bunun yerine bağımlılık yapmam gerektiğini düşünüyorum, işe yarayacak gibi görünüyor. Ancak, birden çok kayıt oluşturmanız gerektiğinde bunun nasıl işe yarayacağını bilmiyorum. Bunun için Eloquent'e hiç bir şey inşa edilmedi mi? Eloquent :: shouldReceive ('Kullanıcı', ['name' => 'Bob', ...]) gibi bir şey? – Gnuffo1

+0

evet onu enjekte etmelisiniz, ancak bunun için elverişli bir şey olduğunu düşünmüyorum ... belki yanılıyorum – Sherif