断言 Json 验证错误不起作用
Posted
技术标签:
【中文标题】断言 Json 验证错误不起作用【英文标题】:assert Json Validation Errors does not work 【发布时间】:2020-01-10 08:23:08 【问题描述】:我不是专家,我找不到任何关于我的错误的信息。我希望有人能帮助我理解我的错误。
我正在尝试在 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) 测试\Feature\UsersTest::name_email_password_required_in_creation 未能在键的响应中找到验证错误:'name'
响应没有 JSON 验证错误。 断言数组具有键“名称”失败。
我在测试里面申请了一个
dd($response->getContent());
看看发生了什么,在响应中是:
""name":["The name field is required."],"email":["The email field is required."],"password":["The password field is required."]"
它似乎是一个字符串,但我不知道它是否导致错误,因为JSON包含关键字段错误。
我知道如何解决它。提前致谢。
【问题讨论】:
【参考方案1】:而不是这个:
$response = $this->post('/users', [
'contact' => '545678987'
]);
使用 headers 来接受这样的 json:
$response = $this->json('POST', '/users', ['contact' => '545678987'],
['Accept' => 'application/json']
);
同样对于验证错误,响应代码是 422,所以使用:
if ($validator->fails())
return response()->json($validator->errors(), 422);
【讨论】:
我的服务覆盖响应并且是 400。我将尝试标头 Accept 但响应是验证信息结构。不仅仅是标题以上是关于断言 Json 验证错误不起作用的主要内容,如果未能解决你的问题,请参考以下文章