我有一个测试用例,允许用户一次创建/发布多个项目。请看我的测试:
/**
* Test multiple item creation.
*
* @return void
*/
public function testMultipleCreation()
{
$token = Test::generateToken();
$user = Test::getAuthenticatedUser();
$stall = factory(Stall::class)->make()->toArray();
$item = factory(Item::class, 5)->make()->toArray();
dump($item);
$user->addStall($stall);
$response = $this->withHeaders(['Authorization' => 'Bearer ' . $token]);
$response = $response->json('POST', route('items.store', $item));
$response->assertStatus(200);
// $this->assertDatabaseHas('items', $item);
}
这是控制器:
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\StoreItem $request
* @return \App\Helpers\ResponseMessage
*/
public function store(StoreItem $request)
{
if (is_array($request)) {
$this->createMultiple($request);
}
$item = auth()->user()->addItem(
$request->validated()
);
return ResponseMessage::created('item', $item);
}
/**
* Create multiple items.
*
* @param array $items
* @return void
*/
protected function createMultiple($items)
{
$itemCollection = [];
foreach ($items as $item) {
$itemCollection[] = auth()->user()->addItem(
$item->validated()
);
}
return ResponseMessage::created('items', $itemCollection);
}
如果我将其发布为$item = factory(Item::class)->make()->toArray();,它可以正常工作,但是如果我将其设置为 1 个以上的工厂项目,则会失败并引发此错误:
1) Tests\Unit\ItemTest::testMultipleCreation ErrorException: 数组到字符串的转换
错误!测试:9,断言:20,错误:1。
Qyouu