2016-12-14 6 views
1

Я пытаюсь издеваться над моделью и возвращать false на вставке, поэтому я могу проверить ошибку.Laravel model mock

вот мой тест насмехаясь

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

и вот мой метод вставки в контроллер

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

и я жду $ результат быть ложным, но вместо этого я получить идентификатор (целое).

если я удалю dd(); Я получаю эту ошибку на терминале.

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

ответ

0

Вы используете insertGetId(), который возвращает вставленный идентификатор. Используйте вместо этого insert().

Если таблица имеет автоинкрементный идентификатор, используйте метод insertGetId для вставки записи, а затем получить идентификатор типа:

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

но в случае вставить это возвращает истину или ложь в зависимости от успеха или отказ запроса.

+0

спасибо, но все же я прав. издевательство должно было перехватить и вместо этого вернуть false. –

+0

также, если я использую вставку, то как бы получить последнюю вставку? –

+0

Вы можете поместить чек, как если бы возвращаемое значение равно 0, т.е. false, и если оно вставлено успешно, то оно вернет идентификатор, который определенно больше 0 –