我在
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
),并且我覆盖异常以通过。但是在登录时,测试不行
错误消息“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');
}