laravel - 如何在运行时模拟和测试没有迁移模式的模型
问题描述
模型/订单.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
在运行时模拟关系?
解决方案
推荐阅读
- ruby - 我可以从它的受让人那里得到变量名吗?
- c - 用于小数据文件 (~10KB) 的快速且强大的校验和算法
- bash - 从 bash 中的原始数据中提取列表,或者只是格式化输出 list_name 后跟列表内容
- reactjs - React 和 TypeScript - 组件
- objective-c - 为什么我不能访问这个指针的值。目标c
- c# - Selenium C# - Web 元素属性存在但找不到?
- c# - 如何添加不使用属性的服务器端验证规则?
- facebook - 使用带有永久页面访问令牌的 Instagram Graph Api 仅适用于某些帐户
- java - 结合 2 个区间
- sql-server - 创建一个只能通过代码更新的只读列