【问题标题】:How to create mock model in laravel testing如何在 laravel 测试中创建模拟模型
【发布时间】:2020-03-29 16:29:18
【问题描述】:

我需要在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']);
    ...
}

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

【问题讨论】:

    标签: laravel testing mocking


    【解决方案1】:

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

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

    use Illuminate\Foundation\Testing\DatabaseTransactions;
    
    class ExampleTest extends TestCase
    {
        use DatabaseTransactions;
    ...
    

    更多你可以阅读here内部交易。

    还有一个helpful answer

    祝你好运!

    【讨论】:

    • 感谢它为我所做的工作,所以我可以删除$mockUser = Mockery::mock(new App\User()); 吗?
    • @SinSin 如果需要,可以使用$mockUser = User::create() 创建新用户,该用户将存在用于测试目的,并且不会更新数据库。如果答案有帮助,请点赞并标记。谢谢! :)
    • 这种方法安全吗,因为我的数据库中有重要数据?
    • 非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2023-04-02
    • 2020-03-18
    • 2015-04-26
    • 1970-01-01
    • 2013-12-04
    • 2022-01-11
    相关资源
    最近更新 更多