Laravel Unit Test Cases with Data Provider – Devstringx
Laravel is an open-source PHP framework, Which is widely used for web application development using PHP. Laravel provides the reusability of the code. And well-structured formatting of the code and files. It has a rich collection of libraries for different tasks.
It provides pre-installed libraries that are useful for most web applications. The highly optimized code increases the loading speed of the application. It provides a large collection of features than any other PHP framework
Here we will learn about Unit Test Cases in laravel
Create Project and Setup Project
Composer create-project Laravel/Laravel test project
After the project creates successfully. You need to change the database configuration in .env
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=
Create Test API
Create controller :
PHP artisan make: controller UserController
Write the below code in the UserController.php
<?PHP namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { public function AddTwoNumbers(Request $request) { //Defining rules for input validation if ($request->no1 == "" || !isset($request->no1)) { $response_data = [ "error" => true, "message" => "no1 is required", "status" => "Precondition Failed", "status_code" => 412, "data" => "", ]; return response($response_data, 412)->header('Content-Type', 'text/Json'); } if ($request->no2 == "" || !isset($request->no2)) { $response_data = [ "error" => true, "message" => "no2 is required", "status" => "Precondition Failed", "status_code" => 412, "data" => "", ]; return response($response_data, 412)->header('Content-Type', 'text/Json'); } if (!is_numeric($request->no1)) { $response_data = [ "error" => true, "message" => "no1 should be numeric", "status" => "Precondition Failed", "status_code" => 412, "data" => "", ]; return response($response_data, 412)->header('Content-Type', 'text/Json'); } if (!is_numeric($request->no2)) { $response_data = [ "error" => true, "message" => "no2 should be numeric", "status" => "Precondition Failed", "status_code" => 412, "data" => "", ]; return response($response_data, 412)->header('Content-Type', 'text/Json'); } //Check user credential if($request->no1 == "0"){ $response_data = [ "error" => true, "message" => "no1 should be greater than zero", "status" => "Precondition Failed", "status_code" => 412, "data" => "", ]; return response($response_data, 412)->header('Content-Type', 'text/Json'); } if($request->no2 == "0"){ $response_data = [ "error" => true, "message" => "no2 should be greater than zero", "status" => "Precondition Failed", "status_code" => 412, "data" => "", ]; return response($response_data, 412)->header('Content-Type', 'text/Json'); } $sum = $request->no1+$request->no2; $response_data = [ "error" => true, "message" => "Numbers added successfully", "status" => "Success", "status_code" => 200, "data" => $sum, ]; return response($response_data, 200)->header('Content-Type', 'text/Json'); } }
And paste the below code in routes\api.PHP
<?PHP use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\UserController; Route::post('AddTwoNumbers', [UserController::class, 'AddTwoNumbers']);
Now check if the API is working. Run below command
PHP artisan serve
Read Also:- How to Install The Telescope In Laravel
Create Your First Unit Test Case
Run the below common in terminal: PHP artisan makes test UserTest –unit Past the below code in the AddTwoNumberTest file. This file contains the data providers, payload, and test function. Pls, read them carefully.
<?php namespace Tests\Unit; use Tests\TestCase; class AddNumbersTest extends TestCase { // /* AddTwoNumbers Api Data Provider */ public function AddTwoNumbersApiDataProvider() { //test with all correct parameters $AddTwoNumbersWithAllParameter = AddNumbersTest::addtownumberPayload(); //test without no1 $AddTwoNumbersWithoutNo1 = AddNumbersTest::addtownumberPayload(); unset($AddTwoNumbersWithoutNo1->no1); //test without no2 $AddTwoNumbersWithoutNo2 = AddNumbersTest::addtownumberPayload(); unset($AddTwoNumbersWithoutNo2->no2); //test without no2 invalid value $AddTwoNumbersWithInvalidDataTypeNo2 = AddNumbersTest::addtownumberPayload(); $AddTwoNumbersWithInvalidDataTypeNo2->no2 = "value"; //test without no1 invalid value $AddTwoNumbersWithInvalidDataTypeNo1 = AddNumbersTest::addtownumberPayload(); $AddTwoNumbersWithInvalidDataTypeNo1->no1 = "value"; return array( 'AddTwoNumbersWithAllParameter' => [$AddTwoNumbersWithAllParameter, 200], 'AddTwoNumbersWithoutNo1' => [$AddTwoNumbersWithoutNo1, 412], 'AddTwoNumbersWithoutNo2' => [$AddTwoNumbersWithoutNo2, 412], 'AddTwoNumbersWithInvalidDataTypeNo2' => [$AddTwoNumbersWithInvalidDataTypeNo2, 412], 'AddTwoNumbersWithInvalidDataTypeNo1' => [$AddTwoNumbersWithInvalidDataTypeNo1, 412] ); } /* AddTwoNumbers API Test Cases */ /** @dataProvider AddTwoNumbersApiDataProvider */ public function test_AddTwoNumbers($payload, $status) { print_r($payload); $response = $this->post('/api/AddTwoNumbers', (array) $payload); $response->assertStatus($status); } public static function addtownumberPayload() { return (object) [ 'no1' => 1, 'no2' => 1 ]; } }
Now your test cases are ready to run. Use the below command to execute the test cases
Read Also:- How to Install CodeIgniter4?
PHP Artisan Test
Congratulations you have successfully run the Unit test cases with dataProviders in Laravel.
If you are interested in even more development-related articles and information from us here at Devstringx, then we have a lot to choose from for you.