如何在 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 测试中发布多维数组?的主要内容,如果未能解决你的问题,请参考以下文章