3 Stimmen

PHPUnit mit einem Zend Framework 2 Modul

Ich habe Schwierigkeiten, einen PHPUnit-Test mit ZF2 zum Laufen zu bringen.

Mein Verzeichnisstruktur sieht wie folgt aus

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

Die Anwendung selbst funktioniert gut.

Jetzt für das Ausführen von PHPUnit-Tests sieht mein bootstrap.php wie folgt aus

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

Dies funktioniert für ZF2-bezogene Dinge, findet jedoch mein Modul nicht. Dann las ich, dass ich folgende Zeile zu meinem bootstrap.php hinzufügen muss

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

Aber jetzt erhalte ich den folgenden Fehler:

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

Leider konnte ich dieses Problem nicht lösen. Was habe ich falsch gemacht? Und wie kann ich das zum Laufen bringen?

Vielen Dank.

2voto

str Punkte 37992

In der Zwischenzeit konnte ich es lösen, indem ich set_include_path() und spl_autoload_register() verwendet habe, wie es in http://robertbasic.com/blog/unit-testing-zend-framework-2-modules beschrieben ist.

0voto

Pascal Punkte 12312

Ich hatte das gleiche Problem.

Ich habe es gelöst, indem ich PHPUnit von der Wurzel meines ZF2-Projekts ausführte mit den folgenden Argumenten:

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

mein

/module/Rest/test/TestConfig.php.dist

ist so eingerichtet, dass es mein Rest Modul testet, wie hier gezeigt:

 array(
        'Rest' // <- mein 'Rest' Modul wird hier getestet.
    ),
    'module_listener_options' => array(
        'config_glob_paths'    => array(
            '../../../config/autoload/{,*.}{global,local}.php',
        ),
        'module_paths' => array(
            'module',
            'vendor',
        ),
    ),
);

natürlich enthält meine ./composer.json auch eine Referenz zu PHPUnit wie folgt:

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

Hinweis:

PHPUnit kann auch nur mit der Bootstrap-Klasse aufgerufen werden (d.h. ohne Angabe der Testsuite-Klasse). Außerdem macht der --colors Flag die Ausgabe von PHPUnit lesbarer:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X