Макет модели Laravel

Я пытаюсь смоделировать модель и вернуть false при вставке, чтобы я мог проверить случай сбоя.

вот мой тест издевательский

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

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

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

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

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

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

1 ответ

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

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

$id = DB::table('users')->insertGetId(
    ['email' => 'john@example.com', 'votes' => 0]
);

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

Другие вопросы по тегам