首页 > 解决方案 > 如何在 laravel 测试中创建模拟模型

问题描述

我需要测试一个函数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']);
    ...
}

但是这个函数在数据库中创建了一个真实的行。我如何为这个请求模拟数据库?

标签: laraveltestingmocking

解决方案


如果您不想在 DB 中创建新行,可以使用DatabaseTransactions.

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

use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    use DatabaseTransactions;
...

您可以在此处阅读更多交易内容。

另外,一个有用的答案

祝你好运!


推荐阅读