Level 102
Feb 3, 2023
1
Level 2
Test is throwing an Exception
Hi,
I have a test which is throwing an exception, however when send a request to the same endpoint in postman, it sends the expected error json response. Can anyone advise what I am doing wrong here?
This is my test:
public function email_field_is_required() {
User::factory()->create([
'name' => $this->faker->name,
'email' => $this->faker->email,
'password' => 'password'
]);
$response = $this->post('/api/login', [
'email' => null,
'password' => 'password'
]);
$response->assertStatus(422);
$response->assertJson([
[
'email' => [
'The email field is required.'
]
]
]);
}
This is the output when I run the test:
% ./vendor/bin/phpunit --filter email_field_is_required
PHPUnit 9.5.28 by Sebastian Bergmann and contributors.
E 1 / 1 (100%)
Time: 00:00.502, Memory: 32.00 MB
There was 1 error:
1) Tests\Feature\AuthApiTest::email_field_is_required
Illuminate\Validation\ValidationException: The email field is required.
/project/vendor/laravel/framework/src/Illuminate/Foundation/Http/FormRequest.php:148
/project/vendor/laravel/framework/src/Illuminate/Validation/ValidatesWhenResolvedTrait.php:32
/project/vendor/laravel/framework/src/Illuminate/Foundation/Providers/FormRequestServiceProvider.php:30
/project/vendor/laravel/framework/src/Illuminate/Container/Container.php:1285
/project/vendor/laravel/framework/src/Illuminate/Container/Container.php:1250
/project/vendor/laravel/framework/src/Illuminate/Container/Container.php:1235
/project/vendor/laravel/framework/src/Illuminate/Container/Container.php:794
/project/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:860
/project/vendor/laravel/framework/src/Illuminate/Container/Container.php:710
/project/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:845
/project/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php:85
/project/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php:50
/project/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php:30
/project/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:60
/project/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:40
/project/vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
/project/vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
/project/vendor/laravel/framework/src/Illuminate/Routing/Router.php:798
/project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:141
/project/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:50
/project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:180
/project/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php:126
/project/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php:102
/project/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php:54
/project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:180
/project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:116
/project/vendor/laravel/framework/src/Illuminate/Routing/Router.php:799
/project/vendor/laravel/framework/src/Illuminate/Routing/Router.php:776
/project/vendor/laravel/framework/src/Illuminate/Routing/Router.php:740
/project/vendor/laravel/framework/src/Illuminate/Routing/Router.php:729
/project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:190
/project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:141
/project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21
/project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php:31
/project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:180
/project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21
/project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php:40
/project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:180
/project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php:27
/project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:180
/project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php:86
/project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:180
/project/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php:62
/project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:180
/project/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php:39
/project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:180
/project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:116
/project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:165
/project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:134
/project/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:557
/project/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:352
/project/tests/Feature/AuthApiTest.php:57
This is the controller function:
public function store(StoreAuthRequest $request): Response
{
$user = User::where('email', $request->validated('email'))->first();
if(!$user || !Hash::check($request->validated('password'), $user->password)) {
return response([
'message' => 'Invalid Credentials'
], 401);
}
return response([
'user' => new UserResource($user),
'token' => $user->createToken('AppToken')->plainTextToken
], 201);
}
And this is the response from Postman when I leave the email field blank:
{
"message": "The email field is required.",
"errors": {
"email": [
"The email field is required."
]
}
}
Please or to participate in this conversation.