我不是专家,也找不到关于我的错误的任何信息。我希望有人可以帮助我理解我的错误。
我正在尝试在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包含关键字段错误。
我确实知道如何解决。预先感谢。
答案 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);
}