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

时间:2016-05-16 10:06:27

标签: json laravel phpunit laravel-5.2

我在测试用例中发送了一个post请求,并且我想声明一个特定的元素,假设响应中存在键'x'。在这种情况下,我不能说seeJson(['x' => whatever]);,因为我不知道这个值。当然,我不能用seeJson(['x']);来做。

有没有办法解决这个问题?

如果重要: Laravel:v5.2.31 PHPUnit:5.3.4

2 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:4)

<击> 虽然它根本不是最优的,但我选择使用此代码来测试情况:

$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);
}