Laravel模型模拟

时间:2016-12-14 11:46:08

标签: php laravel unit-testing mocking mockery

我试图模拟一个模型并在插入时返回false,这样我就可以测试失败的情况。

这是我的测试模拟

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

这是我在控制器中的插入方法

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

我希望$ result为false,但我得到id(int)。

如果我删除dd();我在终端上收到此错误。

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

1 个答案:

答案 0 :(得分:0)

您正在使用 insertGetId(),它会返回插入的ID。请改用 insert()

如果表具有自动递增ID,请使用insertGetId方法插入记录,然后检索ID,如:

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

但是在插入的情况下,它会根据查询的成功或失败返回true或false。