【问题标题】:How to post Faker collection in Laravel testing?如何在 Laravel 测试中发布 Faker 收藏?
【发布时间】:2019-10-12 03:36:00
【问题描述】:

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

/**
 * 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) 测试\Unit\ItemTest::testMultipleCreation ErrorException:数组到字符串的转换

错误! 测试:9,断言:20,错误:1。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    问题可能在这里

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

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

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

    【讨论】:

    • 我试过了,先生,然后我得到了 422 错误。即使有与表单请求匹配的键,数组也不会得到验证。
    • 那是另一个问题。无论如何,如果没有有关验证的相关代码,我也无能为力。
    • 没关系先生,我决定在前端处理请求并从后端删除此功能。非常感谢您的帮助
    猜你喜欢
    • 2018-10-23
    • 1970-01-01
    • 2018-01-06
    • 2019-09-07
    • 2016-04-18
    • 2021-04-13
    • 2014-08-12
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多