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

时间:2017-07-31 09:32:10

标签: php laravel laravel-5.2 phpunit

我无法在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)

2 个答案:

答案 0 :(得分:0)

用以下代码替换您的测试代码:

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

答案 1 :(得分:0)

根据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'
                    ]
     ]
])