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

我有一个测试用例,允许用户一次创建/发布多个项目。请看我的测试:


/**

 * 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。


跃然一笑
浏览 136回答 1
1回答

Qyouu

问题很可能在这里$response = $response->json('POST', route('items.store', $item));由于 $item 是一个数组,它不知道如何转换它。可能你的意思是$response = $response->json('POST', route('items.store'), $item);
打开App,查看更多内容
随时随地看视频慕课网APP