断言 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 验证错误不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin Spring Boot 验证不起作用

比特币 JSON RPC 身份验证不起作用

Liferay json Web 服务:添加用户不起作用?

柏树应该有类断言不起作用

XCUITest:调用的测试函数中的断言不起作用

合成全景图不起作用