如何在 Laravel 测试中发布多维数组?

Posted

技术标签:

【中文标题】如何在 Laravel 测试中发布多维数组?【英文标题】:How to POST multidimensional array in a Laravel test? 【发布时间】:2018-01-06 19:20:09 【问题描述】:

我无法在我的 Laravel 测试中发布多维数组。一维数组 POST 很好。也许我应该使用其他一些使用 json_encode 的函数,但我找不到任何支持它的东西。

重要的是我能够发布下面的数据结构,我已在我的 seeJSONStructure() 断言中添加以更好地说明数据结构。

这是我的测试示例:

$this->json('POST', '/endpoint', [
    'foo' =>  'foo',
    'bar' =>   [
        [
            'foo' => 'foo',
            'bar' => 'bar'
        ]
     ]
])
->assertResponseStatus(200)
->seeJsonStructure([
    '*' => [
        'foo', 
        'bar' => [
            '*' => [
                'foo',
                'bar'
            ]
        ]
    ]
]);

这给了我错误

phpUnit_Framework_Exception: Argument #2 (No Value) of PHPUnit_Framework_Assert::assertArrayHasKey() must be an array or ArrayAccess

删除嵌套数组可以防止错误,但必须有一种方法可以 POST 多维数组。

以下工作正常:

$this->json('POST', '/endpoint', [
    'foo' =>  'foo',
    'bar' =>  'bar'
])
->assertResponseStatus(200)

【问题讨论】:

检查这里 'bar => 'bar' 添加单引号 'foo => 'foo', & 'bar => 'bar' 是拼写错误吗? 抱歉,我的示例中缺少的单引号是一个错字,而不是真正的问题 @Elliot 我更新了我的答案 【参考方案1】:

用下面的代码替换你的测试代码:

$this->json('POST', '/endpoint', [
    'foo' =>  'foo',
    'bar' =>   [
        [
            'foo' => 'foo',
            'bar' => 'bar'
        ]
     ]
])
->assertResponseStatus(200)

【讨论】:

你的回答有什么变化? @Nawin:我不明白你的意思,你能澄清一下'现在和 Elliot 给出的一样' 对不起,单引号在我的示例中是一个错字,而不是问题的一部分。我现在更新了我的问题 @Elliot:听起来不错,让我检查一下,因为这不是错误 @Elliot:这个错误有很多可能,首先你需要检查端点是否正确?【参考方案2】:

根据document assertArrayHasKey() 需要提供数组的密钥...试试这样 未测试...并检查您的endpoint 路径是否正确。

$this->json('POST', '/endpoint', [
    'foo' =>  'foo',
    'bar' =>   [    
            'baz'=>[
                    'foo' => 'foo',
                    'bar' => 'bar'
                    ]
     ]
])
->assertResponseStatus(200)

已编辑: JsonStructure 的新代码

$this->json('POST', '/endpoint', [
    'foo',
    'bar' =>   [    
            '*'=>[
                    'foo',
                    'bar'
                    ]
     ]
])

【讨论】:

感谢您强调这一点,但我的 API 期望 bar 是一个对象数组。我更新了我的问题以包括我的关键结构断言,所以它更清楚。我如何发布这个数据结构? @Elliot 你问的就像 jsonStructure 一样,那么这可能是可行的

以上是关于如何在 Laravel 测试中发布多维数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel/PHP 中创建多维数组

如何使用 laravel 将多维数组传递给 API

使用 Laravel 和 ajax 保存多维数组

循环多维数组 Laravel

在 laravel 中导出 excel 或 csv 中的多维数组

在 Laravel 8 Blade 中使用多维数组