首页 > 解决方案 > 如何在运行时模拟和测试没有迁移模式的模型

问题描述

模型/订单.php

<?php

class Order extends Model
{
    public function details()
    {
        $this->hasMany(OrderDetails::class);
    }
}

型号/OrderDetail.php


class OrderDetail extends Model
{
}

服务/MakeOrder.php

<?php

namespace App\Services;

class MakeOrder extends Service
{
    public function run(string $date)
    {
        $this->prepareOrders($date);

        // Doing something
    }

    private function prepareOrders(string $date)
    {
        return \App\Models\Order::where('created_date', $date)->get(); // Need mock details from here
    }
}

测试/服务/MakeOrderTest.php

<?php

namespace Tests\Unit\Services;

use App\Models\Order;
use App\Services\MakeOrder;
use Mockery\MockInterface;
use Tests\TestCase;

class MakeOrderTest extends TestCase
{
    public function testOrder()
    {
        $this->mock('alias:' . Order::class, function (MockInterface $mock) {
            $mock->shouldReceive('where->get')->andReturn(collect('test'));
        });
        $order = MakeOrder::run('20210927');
    }
}

这是一个简单的hasMany关系表示例,我的问题是这种情况下它连接到远程数据库,因此我不需要在本地进行迁移,这意味着我不能使用工厂方法创建数据来做单元-测试,我知道如何在运行时服务中模拟模型,但不知道如何details在运行时模拟关系?

标签: laravellaravel-8

解决方案


推荐阅读