为什么要验证重定向而不是返回 json 响应?

问题描述 投票:0回答:1

我在

loginTest
中创建了这个测试,它与另一个测试(
code_is_required
)中的
createdUserTest
几乎相同。

他们使用了我为自己创建的相同断言(

assertJsonApiValidationErrors
):

/**
 @test
 */
public function email_is_required()
{
    $this->withoutExceptionHandling();

    // Send a request without password
    Role::factory(3)->create();
    User::factory(1)->create([
        'state' => '1'
    ])->first();

    $response = $this->post(
        route('api.user.login'),
        [
            'data' => [
                'type' => 'user',
                'attributes' => [
                    'password' => 'password'
                ]
            ]
        ]
    );

    // Using the macro create in MakesJsonRequest to validate
    $response->assertJsonApiValidationErrors('email');
}

我的控制器登录:

function login(Request $request)
{
    $request->validate([
        'data.attributes.email' => 'required',
        'data.attributes.password' => 'required',
    ]);
}

如果我不进行验证,测试会显示

"Don't find error for the field"
,但如果我进行验证,则不起作用:

  FAILED  Tests\Feature\SessionTest > email is required                         ValidationException   
  The data.attributes.email field is required.

  Tests:    2 failed, 3 passed (18 assertions)
  Duration: 0.81s

该宏验证与其他测试相同的特定结构(

createUserTest
),并且我覆盖异常以通过。但是在登录时,测试不行

php laravel unit-testing laravel-10 httpbackend
1个回答
0
投票

错误消息“data.attributes.email 字段为必填项。”这是预期的,因为您没有在测试请求中提供“电子邮件”。如果您希望测试通过,请在测试请求中包含“电子邮件”字段。

public function email_is_required()
{
    $this->withoutExceptionHandling();
    // Send a request without password
    Role::factory(3)->create();
    User::factory(1)->create([
        'state' => '1'
    ])->first();

    $response = $this->post(
        route('api.user.login'),
        [
            'data' => [
                'type' => 'user',
                'attributes' => [
                    'email' => '[email protected]', // Add this line
                    'password' => 'password'
                ]
            ]
        ]
    );
    // Using the macro create in MakesJsonRequest to validate
    $response->assertJsonApiValidationErrors('email');
}
© www.soinside.com 2019 - 2024. All rights reserved.