【问题标题】:assert Json Validation Errors does not work断言 Json 验证错误不起作用
【发布时间】: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包含关键字段错误。

我知道如何解决它。提前致谢。

【问题讨论】:

    标签: json laravel validation phpunit


    【解决方案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 但响应是验证信息结构。不仅仅是标题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多