Skip to content

Tests ​

When you run the Modular Installer, it will publish the tests for the provided Modules (like User Module, ACL Module, etc) to the Tests directory of each respective module. The tests are written using the Pest PHP Testing Framework.

Setting Up the Tests ​

Before running the initial test suite for your Modular installation, make the following changes in your ./phpunit.xml file:

  1. Add the new Modules testsuite entry.
  2. Ensure you uncomment the DB_CONNECTION and DB_DATABASE lines.
xml
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
         bootstrap="vendor/autoload.php"
         colors="true"
>
    <testsuites>
        <testsuite name="Unit">
            <directory>tests/Unit</directory>
        </testsuite>
        <testsuite name="Feature">
            <directory>tests/Feature</directory>
        </testsuite>
        <testsuite name="Modules">
            <directory>modules/*/Tests</directory>
        </testsuite>
    </testsuites>
    <source>
        <include>
            <directory>app</directory>
        </include>
    </source>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="BCRYPT_ROUNDS" value="4"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="DB_CONNECTION" value="sqlite"/>
        <env name="DB_DATABASE" value=":memory:"/>
        <env name="MAIL_MAILER" value="array"/>
        <env name="QUEUE_CONNECTION" value="sync"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="TELESCOPE_ENABLED" value="false"/>
    </php>
</phpunit>

Running the Tests ​

You can run the initial Test Suite by typing the following command in your Terminal (from your project root directory):

bash
./vendor/bin/pest

The result will be similar to:

bash
   PASS  Tests\Feature\Auth\AuthenticationTest
  ✓ login screen can be rendered                                         0.19s
  ✓ users can authenticate using the login screen                        0.09s
  ✓ users can not authenticate with invalid password                     0.01s
  ✓ users can logout                                                     0.02s

   PASS  Tests\Feature\Auth\PasswordResetTest
  ✓ reset password link screen can be rendered                           0.01s
  ✓ reset password link can be requested                                 0.02s
  ✓ reset password screen can be rendered                                0.01s
  ✓ password can be reset with valid token                               0.02s

   PASS  Tests\Feature\Dashboard\DashboardTest
  ✓ it can render the dashboard page                                     0.02s

   PASS  Tests\Feature\Permission\GetUserPermissionTest
  ✓ user permission service returns correct direct permissions for the…  0.01s
  ✓ user permission service returns correct empty permissions for the u… 0.01s
  ✓ user permission service returns correct role permissions for the us… 0.01s
  ✓ user permission service returns correct direct and role permissions… 0.01s

   PASS  Tests\Feature\Permission\PermissionTest
  ✓ permission list can be rendered                                      0.02s
  ✓ permission can be created                                            0.01s
  ✓ permission edit can be rendered                                      0.01s
  ✓ permission can be updated                                            0.01s
  ✓ permission can be deleted                                            0.01s

   PASS  Tests\Feature\Role\RolePermissionTest
  ✓ role permissions can be rendered                                     0.02s
  ✓ role permissions can be updated                                      0.01s

   PASS  Tests\Feature\Role\RoleTest
  ✓ role list can be rendered                                            0.01s
  ✓ role can be created                                                  0.01s
  ✓ role edit can be rendered                                            0.01s
  ✓ role can be updated                                                  0.01s
  ✓ role can be deleted                                                  0.01s

   PASS  Tests\Feature\Support\ActivityLogTraitTest
  ✓ it logs the activity for the model                                   0.01s

   PASS  Tests\Feature\Support\EditorImageTraitTest
  ✓ it can upload an image to the default editor media file path         0.02s

   PASS  Tests\Feature\Support\FileNameGeneratorTraitTest
  ✓ it can set the name of a uploaded file                               0.01s

   PASS  Tests\Feature\Support\SearchableTraitTest
  ✓ it returns empty collection if no result is found                    0.01s
  ✓ it can search a single database column                               0.01s
  ✓ it can search multiple database columns                              0.01s

   PASS  Tests\Feature\Support\UpdateOrderTraitTest
  ✓ it can update the order of the model items                           0.01s

   PASS  Tests\Feature\Support\UploadFileTraitTest
  ✓ it can handle requests without uploads                               0.01s
  ✓ it can handle requests with wrong inputs                             0.01s

   PASS  Tests\Feature\User\UserPermissionTest
  ✓ user permissions can be rendered                                     0.01s
  ✓ user permissions can be updated                                      0.02s

   PASS  Tests\Feature\User\UserRoleTest
  ✓ user roles can be rendered                                           0.02s
  ✓ user roles can be updated                                            0.01s

   PASS  Tests\Feature\User\UserTest
  ✓ user list can be rendered                                            0.01s
  ✓ user can be created                                                  0.01s
  ✓ user edit can be rendered                                            0.01s
  ✓ user can be updated                                                  0.01s
  ✓ user can be deleted                                                  0.01s

  Tests:    45 passed (370 assertions)
  Duration: 0.96s

Writing Tests ​

As you create new modules, it is recommended that you write tests for them.

Modular provides a generator specifically for tests. This tool can be used to create a new test file for a given module, equipped with a basic blueprint.

The initial tests included in Modular's Core Modules serve as a useful starting point for your own tests. They cover all CRUD operations and include Inertia.js Specific Tests Syntax. For more information about testing, refer to the Pest Testing Framework documentation and Testing Section of the Laravel Docs.