3

I'm struggling in getting a PHPUnit test to work with ZF2.

My directory structure looks as follows

project
- src
  - config, data, module, public, vendor
  - init_autoloader.php
- test
  - bootstrap.php
  - SimpleTest.php

The application itself works well.

Now for running PHPUnit tests, my bootstrap.php looks as follows

putenv('ZF2=../src/vendor/zendframework/zendframework/library');
$loader = include '../src/vendor/autoload.php';
include '../src/init_autoloader.php';

This works for ZF2 related things but does not find my module. I then read that I have to add the following line to my bootstrap.php

Zend\Mvc\Application::init(include '../src/config/application.config.php');

But now I get the following error:

PHP Fatal error:  Uncaught exception 'Zend\ModuleManager\Exception\RuntimeException' with message 'Module (Mymodule) could not be initialized.' in /Users/_/src/vendor/zendframework/zendframework/library/Zend/ModuleManager/ModuleManager.php:139

Unfortunately, I was not able to resolve this issue. What did I do wrong? And how can I make this work?

Thank you very much.

4
  • Take a look at this, it worked for me. devblog.x2k.co.uk/… Commented Oct 19, 2012 at 20:04
  • They use Zend\Mvc\Application::init() the same way I did, so it does not work for me. Commented Oct 20, 2012 at 12:28
  • I'm glad to see you got it working. Take a look here to see my working setup github.com/vascowhite/ZendMinimumApplication/tree/master/test if you're interested. Commented Oct 20, 2012 at 12:32
  • Thanks, that might come in handy for the next project. Commented Oct 20, 2012 at 12:38

2 Answers 2

2

In the meantime I was able to solve it using set_include_path() and spl_autoload_register() as described in http://robertbasic.com/blog/unit-testing-zend-framework-2-modules.

Sign up to request clarification or add additional context in comments.

Comments

0

I had the issue as well.

I solved it by running phpunit from the root of my ZF2 project with the following arguments:

 ./vendor/bin/phpunit
  --bootstrap ./module/Rest/test/Bootstrap.php
  ./module/Rest/test/RestTest/Controller/RestControllerTest.php

my

<zf2_project_root>/module/Rest/test/TestConfig.php.dist

is setup up to test my Rest module as show here:

<?php
return array(
    'modules' => array(
        'Rest' // <- my 'Rest' module is the one I test here.
    ),
    'module_listener_options' => array(
        'config_glob_paths'    => array(
            '../../../config/autoload/{,*.}{global,local}.php',
        ),
        'module_paths' => array(
            'module',
            'vendor',
        ),
    ),
);

of course, my ./composer.json contains a reference to phpunit as follow:

{
    "require" : {
        ...,
        "phpunit/phpunit" : "3.7.*",
        ...,
    }
}

Note:

phpunit can also be invoked with bootstrap class only (i.e., whithout specifying the test suite class). Also using the --colors flag makes phpunit output more readable:

 ./vendor/bin/phpunit
  --colors
  --bootstrap ./module/Rest/test/Bootstrap.php

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.