为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Laravel 测试中发布 Faker 集合?

如何在 Laravel 测试中发布 Faker 集合?

PHP
跃然一笑 2021-07-06 13:05:14
我有一个测试用例,允许用户一次创建/发布多个项目。请看我的测试:/** * 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。
查看完整描述

1 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

问题很可能在这里

$response = $response->json('POST', route('items.store', $item));

由于 $item 是一个数组,它不知道如何转换它。可能你的意思是

$response = $response->json('POST', route('items.store'), $item);


查看完整回答
反对 回复 2021-07-09
  • 1 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信