Laravel测试 - 如何验证JSON响应中的每个字段

时间:2017-07-06 17:38:20

标签: php laravel unit-testing

我想用有效的格式测试我的端点。例如,我有/api/token(POST),它将返回api令牌。

在我的情况下,此端点将返回"令牌"字符串和"消息"领域。因此,我想检查这两个字段是否存在有效格式。目前我正在使用Laravel Validator

示例json输出:

{
"message": "login successful",
"token": "d4zmendnd69u6h..."
}

测试类(ApiTokenTest.php)。

class ApiTokenTest extends TestCase
{

    protected $validFormBody = [
        'os_type' => 'android',
        'device_id' => '0000-AAAA-CCCC-XXXX',
        'os_version' => '5.1',
        'apps_version' => '1.0',
    ];

    public function testSucessResponseFormat()
    {
        $response = $this->json('post', '/api/token', $this->validFormBody);

        $validator = Validator::make(json_decode($response->getContent(), true), [
            'token' => 'required|size:100', // token length should be 100 chars
            'message' => 'required',
        ]);

        if ($validator->fails()) {
            $this->assertTrue(false);
        }
        else {
            $this->assertTrue(true);
        }
    }

}

这里的问题是失败消息确实没有帮助,特别是如果我有超过1个不是有效格式的字段,我应该逐个断言吗? (见下面phpunit失败案例输出)。我应该使用什么来验证每个字段的格式? 提前谢谢。

There was 1 failure:

1) Tests\Feature\ApiTokenTest::testSucessResponseFormat
Failed asserting that false is true.

1 个答案:

答案 0 :(得分:1)

如果确实存在任何验证错误,您似乎没有在终端中显示任何内容,如果验证程序失败,您可以在终端中执行var_dump,如下所示:

    if ($validator->fails()) {
        var_dump($validator->errors()->all());
        $this->assertTrue(false);
    }
    else {
        $this->assertTrue(true);
    }