2016-12-14 4 views
1

Ich versuche, ein Modell zu verspotten und falsch auf Einsatz zurück, so dass ich Fehlerfall testen kann.Laravel Modell Mock

hier ist mein Test verspotten

$mockModel = Mockery::mock(\App\Models\MyModel::class)->shouldReceive(['insertGetId'])->once()->andReturn(false); 

und hier ist meine insert-Methode in Controller

$result = MyModel::insertGetId(['something' => 'somevalue',]); 
dd($result); 

und ich erwarte $ Ergebnis falsch sein, aber stattdessen bekomme ich die ID (int).

wenn ich dd() entferne; Ich bekomme diesen Fehler auf dem Terminal.

Mockery\Exception\InvalidCountException: Method insertGetId() from Mockery_0_App_Models_MyModel should be called 
exactly 1 times but called 0 times. 

Antwort

0

Sie verwenden insertGetId(), die den eingefügten ID zurückgibt. Verwenden Sie stattdessen insert().

Wenn die Tabelle eine automatische Erhöhung id hat, verwenden Sie die insertGetId Methode einen Datensatz einfügen und dann die ID abrufen wie:

$id = DB::table('users')->insertGetId(
    ['email' => '[email protected]', 'votes' => 0] 
); 

aber im Fall setzen Sie sich wahr oder falsch zurückgeben basierend auf Erfolg oder Fehler bei der Abfrage

+0

danke aber immer noch werde ich wahr. Spott sollte abgefangen und stattdessen falsch zurückgegeben haben. –

+0

auch wenn ich insert dann wie würde ich letzte einfügen? –

+0

Sie können eine Überprüfung wie wenn Rückgabewert ist 0 dh falsch, und wenn sie erfolgreich eingefügt, als es die ID, die definitiv größer als 0 ist –