断言Json验证错误不起作用

时间:2019-09-08 04:45:53

标签: json laravel validation phpunit

我不是专家,也找不到关于我的错误的任何信息。我希望有人可以帮助我理解我的错误。

我正在尝试在Laravel中测试POST请求的必需属性的验证。

测试

我正在使用assertJsonValidationErrors方法来验证控制器中的JSON错误。

/** @test */
public function name_email_password_required_in_creation()
{
    $response = $this->post('/users', [
        'contact' => '545678987'
    ]);
    $response->assertJsonValidationErrors(['name','password','email']);
}

控制器

$validator = Validator::make($request->all(),[
        'name' => 'required',
        'email' => 'required|unique:users,email',
        'password' => 'required',
    ]);

    if ($validator->fails()) {
        return response()->json($validator->errors(), 400);
    }

错误:

1)测试\功能\用户测试:: name_email_password_required_in_creation 未能在键“名称”的响应中找到验证错误

响应没有JSON验证错误。 无法断言数组具有键“名称”。

我在测试中应用了

dd($response->getContent());看看正在发生什么,并且在响应中是:

"{"name":["The name field is required."],"email":["The email field is required."],"password":["The password field is required."]}"

它似乎是一个字符串,但我不知道它是否引起错误,因为JSON包含关键字段错误。

我确实知道如何解决。预先感谢。

1 个答案:

答案 0 :(得分:0)

代替此:

$response = $this->post('/users', [
    'contact' => '545678987'
]);

使用标头接受这样的json:

$response = $this->json('POST', '/users', ['contact' => '545678987'],
    ['Accept' => 'application/json']
);

对于验证错误,响应代码为422,因此请使用:

if ($validator->fails()) {
    return response()->json($validator->errors(), 422);
}