HOW TO WRITE UNIT TEST CASE ON SLIM 3 TO TEST API | Devstringx Technologies
Prerequisites :
-PHP 7.3
-Visual Studio Code
- install slim via composer
//run this command on terminal composer require slim/slim:”3.*”
2. install phpUnit
//run this command on terminal
composer require — dev phpunit/phpunit ^7
Now phpUnit is successfully installed you can see in demo/composer.json file and in the vendor folder.
3. Now we have to create demo/phpunit.xml configuration file which is used to configure the PHPUnit
bootstrap=”vendor/autoload.php” –this is used to autoload the library. Colors=”true”- it is used to add the color to the command line.
Verbose=”true”-for showing more information about your test.
stopOnFailure = “false”- the test executed sequentially if any test fails then it stops the execution of the test.
<directory>tests</directory>-this is a tests directory where I wrote all my test cases.
4. Now we have to create our demo/tests folder in our project.
5. Now create the demo/src folder inside the src folder you have to create a file name routes.php in which you will write your Api.
In routes.php file I have created an Api for addition of two numbers.
6. Now we have to setup the autoload to autoload everything from the tests directory in composer.json file.
Write “autoload-dev”: { “psr-4”: { “Tests\\”: “tests/” } } this in your composer.json file And run command-
composer dump-autoload –o
7. Now coming to the demo/tests folder inside tests folder we have to create a Functional folder inside that I have created a BaseTestCase class which is extended from TestCase class.
Inside BaseTestCase class , we have created runApp function passing the $requesMethod(POST,GET),$requestUri(api name),$requestData(array of data), inside this function I have created mock environment objects with custom information. Mock Environment objects are only useful when writing unit tests.after that I have setting up the $request = Request::createFromEnvironment($environment) object.Now adding the requested data if exist.now settingup the response object.create an object $app = new App();
After that process the application $response = $app->process($request, $response) And return the response.
8. Now create the file for testing out api demo/tests/Functional/routesApiTest
In this we have created a class routesApiTest extended from BaseTestCase class If you are writing test case then you always have to write test as a prefix of the function like testaddNum or you can write as I wrote in my case /** * @test */.now create a function addNum inside this function I have called runApp method in which I am passing the 3 parameters first-method which is post,second-api name,third-data array.Now I am using assertEquals mathods in first parameter is what I expect and second parameter $response->getBody() what it returns.
9. Now run the command in terminal
./vendor/bin/phpunit tests
.
Originally published at https://www.devstringx.com on Aug 28, 2021.