首页 > 解决方案 > Laravel 模型工厂 - 大型 JSON 存根

问题描述

我从外部 API 中提取订单信息并将整个 JSON 响应保存到documents表中。

我显然不想在测试时调用这个 API,所以我设置了一个工厂,但我正在努力解决如何提取这些 JSON 存根。例如:

// 工厂

$factory->define(App\OrderDocument::class, function (Faker $faker) {
    return [
        'document_id' => $faker->uuid,
        'status' => $faker->randomElement(['open', 'partial', 'processed', 'updating']),
        'document' => $faker->text
    ];
});

// 当前使用它就像...

foreach ($this->fullDocuments() as $id => $document){
    $a = factory(\App\OrderDocument::class)->create([
        'document_id' => $id,
        'status' => 'full'
    ]);
    $a->setRawAttributes(['document' => $document]);
    $a->save();
}

其中$this->fullDocuments()包含来自 API 的 document_id 和原始 JSON 响应的数组。

我知道一个更好的方法是工厂化整个 JSON 文档。JSON 包含大约 500 行,所以这将非常耗时,但我不拥有这些数据,所以我认为我不应该试图伪造它。

在我的测试中,我更愿意执行以下操作,但不确定如何操作。

factory(OrderDocument::class, 10)->create([
    'document_id' => $this->getDocumentId($i++),
    'document' => $this->getDocumentStub($i++),
]);

标签: phplaravellaravel-testing

解决方案


推荐阅读