codecept run unit
from the project root. It’s easier to launch single tests when everything works.
One test at a time
It’s possible to run one test at a time via codeception CLI interface via a command like
codecept run tests/unit/NamespaceResolverTest.php
but my problem is that, in my furious coding restructuring, I’ve broken many dependencies and the default bootstrap file, the
_bootstrap.php in the
tests/unit folder, will try to include many classes with missing or broken links.
Create an alternative bootstrap file for PHPUnit
First approach to get around the block was to create an alternative PHPUnit bootstrap file loading only working classes and specifying its path while running PHPUnit
phpunit --colors --bootstrap tests/unit/_phpunit_bootstrap.php tests/unit/NamespaceResolver.php
It now works but it works because I’m running a PHPUnit test generated via Codeception with the command
codecept generate:phpunit unit NamespaceResolver
but many other tests I’d like to run are not PHPUnit tests at all.
A better dynamic way
Codeception is very smart and a better way to do it is to configure either the local to the unit tests
tests/unit/_bootstrap.php or the global
tests/_bootstrap.php files to autoload classes that are requested.
Autoloading will include only classes that are called in code and since I’m running single tests file with
codecept run test/unit/NamespaceResolverTest.php
NamespaceResolver class will be included. I can either add in one of the above mentioned bootstrap files a straight
require_once line (not so smart) like
// file tests/unit/_bootstrap.php or tests/_bootstrap.php require_once dirname(__FILE__) . '/path/to/class/to/include.php'
or use the very polite and convenient autoload structure Codeception provides (smart)
// file tests/unit/_bootstrap.php or tests/_bootstrap.php Codeception\Util\Autoload::register( 'TAD\\MVC\\Helpers', 'Resolver', dirname( dirname( __FILE__ ) ) . '/libs/mvc/helpers' );
Codeception\Util\Autoload::register( 'TAD\\MVC\\Helpers', // anytime I request a class in this namespace 'Resolver', // whose name ends in 'Resolver' dirname( dirname( __FILE__ ) ) . '/libs/mvc/helpers' ); // go and look for it here
I can now run single tests via Codeception.