facile-it / doctrine-test-module
Laminas Framework module that provides features that help you run your Laminas-based App's testsuite more efficiently with isolated tests
Installs: 8 643
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 5
Forks: 1
Open Issues: 0
Requires
- php: ^7.4 || ^8.0
- ext-json: *
- ext-pdo: *
- doctrine/cache: ^1.10 || ^2.0
- doctrine/dbal: ^2.11.3 || ^3.0
- doctrine/doctrine-module: ^4.0 || ^5.0 || ^6.0
- doctrine/doctrine-orm-module: ^3.0 || ^4.0 || ^5.0 || ^6.0
- phpunit/phpunit: ^9.6.22
- psr/container: ^1.0 || ^2.0
Requires (Dev)
- facile-it/facile-coding-standard: ^1.3
- friendsofphp/php-cs-fixer: ^3.68.1
- phpspec/prophecy-phpunit: ^v2.0.0
This package is auto-updated.
Last update: 2025-01-27 17:29:29 UTC
README
Laminas module that provides features that help you run your Laminas App's testsuite more efficiently with isolated tests.
Based on Symfony's doctrine-test-bundle.
It provides a StaticDriver
that will wrap your originally configured Driver
class (like DBAL\Driver\PDOMysql\Driver
) and keeps a database connection statically in the current php process.
With the help of a PHPUnit extension class it will begin a transaction before every testcase and roll it back again after the test finished for all configured DBAL connections. This results in a performance boost as there is no need to rebuild the schema, import a backup SQL dump or re-insert fixtures before every testcase. As long as you avoid issuing DDL queries that might result in implicit transaction commits (Like ALTER TABLE
, DROP TABLE
etc; see https://wiki.postgresql.org/wiki/Transactional_DDL_in_PostgreSQL:_A_Competitive_Analysis) your tests will be isolated and all see the same database state.
How to install and use this Module?
-
install via composer
composer require --dev facile-it/doctrine-test-module
-
Enable the module for your test environment in your
config/application.php
<?php return [ 'modules' => [ 'Facile\DoctrineTestModule', ], ];
Using the Module with PHPUnit
-
Add the Extension to your PHPUnit XML config
-
PHPUnit 9:
<phpunit> ... <extensions> <extension class="Facile\DoctrineTestModule\PHPUnit\PHPUnitExtension" /> </extensions> </phpunit>
-
PHPUnit 10+:
<phpunit> ... <extensions> <bootstrap class="Facile\DoctrineTestModule\PHPUnit\PHPUnitExtension" /> </extensions> </phpunit>
-
-
Make sure you also have
phpunit/phpunit
available as adev
dependency (versions 9 and 10 are supported with the built-in extension) to run your tests. -
That's it! From now on whatever changes you do to the database within each single testcase are automatically rolled back for you 😊
Configuration
The module exposes a configuration that looks like this by default:
use Facile\DoctrineTestModule\ConfigProvider; return [ ConfigProvider::CONFIGURATION: [ 'enable_static_connection' => true, ] ];
Setting enable_static_connection: true
means it will enable it for all configured doctrine dbal connections.
You can selectively only enable it for some connections if required:
use Facile\DoctrineTestModule\ConfigProvider; return [ ConfigProvider::CONFIGURATION: [ 'enable_static_connection' => [ 'orm_default' => true, ], ] ];