I went through the Phalcon docs and got PHPUnit set up and working. However, I'm having trouble bootstrapping my existing services into the unit testing framework.
Currently, I load my config, routes, and services in the /public/index.php
. For example, I'm loading the session library:
$di->set(
'session',
function () use ( $config ) {
$session = new Phalcon\Session\Adapter\Redis(
... config ...
);
});
So now, in my application I'd have code that calls $this->session->get( 'user_id' )
to use the session library. I have many of these services -- one for SQL, MongoDB, cookies, etc.
The problem I'm having is correctly loading these services into the unit testing class. The Phalcon docs recommend loading my DI services in the UnitTestCase class (explained here) but I really do not want re-define the same services in this class loader. Additionally, I want to use the components in my application in the same ways; those components rely on the services being lazy-loaded.
So, to attempt this, I include the same /app/config/services.php
file in my unit testing TestHelper.php
init script thinking that I can just use the same $di object. This works in that my test cases can call $this->di->getSession()->get( 'var' )
but as soon as a component in my app tries to call $this->session->get( 'var' )
it throws an error:
1) Libraries\SessionTest::testGetSet
Undefined property: Libraries\SessionTest::$session
/home/mike/PhalconProject/app/library/Session.php:25
/home/mike/PhalconProject/tests/libraries/SessionTest.php:13
This error is telling me that my application session-management library Session.php
is failing when accessing $this->session->
via the dependency injector.
Is there something I'm fundamentally doing wrong here? Do I need to redefine the services in my unit testing class? And if I do need to redefine them, will my application be able to load its services?