Laravel/PHPUnit:断言 json 元素存在而不定义值

问题描述 投票:0回答:2

我在测试用例中发送一个发布请求,并且我想断言特定元素。 假设我有一个密钥

x
存在于响应中。在这种情况下,我不能说
seeJson(['x' => whatever]);
,因为该值是未知的。 当然,我做不到
seeJson(['x']);

有办法解决这个问题吗?

如果重要的话:

Laravel: v5.2.31

PHPUnit: 5.3.4

json laravel phpunit
2个回答
48
投票

愿它对其他人有帮助。您可以为您的检查响应 json 结构编写此测试

$this->post('/api/login/', [
        'email' => '[email protected]',
        'password' => '123123123',
    ])->assertJsonStructure([
        'status',
        'result' => [
            'id',
            'email',
            'full_name',
        ],
    ]);

12
投票

虽然根本不是最优的,但我还是选择用这段代码来测试一下情况:

$this->post(URL, PARAMS)->see('x');

X 是一个假设的名称,实际的元素键在其余数据中出现的可能性很小。否则这个令人讨厌的解决方法将不切实际。

更新:

这是正确执行此操作的解决方案:

public function testCaseName()

{
    $this->post(route('route.name'), [
        'param1' => 1,
        'param2' => 10,
    ], [
        'headers_if_any' => 'value'
    ]);

    $res_array = (array)json_decode($this->response->content());

    $this->assertArrayHasKey('x', $res_array);
}
© www.soinside.com 2019 - 2024. All rights reserved.