如何在Laravel测试中创建模拟模型

时间:2020-03-29 16:29:18

标签: laravel testing mocking

我需要在UserController中测试一个函数:

public function CreateUser(Request $request): Response
{    
    $user = User::firstOrCreate(['device_id' => $request->device_id]);
    return Response(['status'=> 'user created successfully'],200);
} 

,然后创建与以下相同的测试函数:

public function testCreateUser()
{
    $mockUser = Mockery::mock(new App\User());
    $this->app->instance(App\User::class, $mockUser);
    $this->post(route('user_create'), ['device_id' => 'REC00ER']);
    ...
}

但是此函数在数据库中创建实际行。我该如何为该请求模拟数据库?

1 个答案:

答案 0 :(得分:0)

如果您不想在数据库中创建新行,则可以使用DatabaseTransactions

只需将其添加到您的测试中:

use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    use DatabaseTransactions;
...

您还可以阅读here,了解更多交易内部信息。

还有一个helpful answer

祝你好运!