ZendFramework көмегімен контроллерді тексеруді орнату: Autoloader issue

Мен Zend Framework v1.11.0 бағдарламасымен веб-бағдарламада жұмыс істеп жатырмын, бірақ контроллер сынақтары үшін дұрыс сынақ ортасын орнатпаймын. Мен Zend сынағын жасау туралы көптеген сұрақтар бар екенін білемін, бірақ, сағаттық зерттеулерден кейін, менің бірде-бір мәселе шешілмеді. Міне, менің код:

Test Bootstrap:

<?php
error_reporting(E_ALL | E_STRICT);

defined('APPLICATION_PATH') || define('APPLICATION_PATH',realpath(dirname(__FILE__).'/../../application'));
define('APPLICATION_ENV', 'testing');
set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH.'/../library'), get_include_path())));

require_once ('Zend/Application.php');
require_once ('ControllerTestCase.php');

ControllerTestCase:

class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase {

  public $application;

  public function setUp() {
    $this->bootstrap = array($this, 'appBootstrap');
    parent::setUp();
  }

  public function appBootstrap() {
    $this->application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH.'/configs/application.ini');
    $this->application->bootstrap();
  }
}

Қарапайым тест:

class IndexControllerTest extends ControllerTestCase {
    public function testDefaultShouldInvokeIndexAction()
    {
        $this->dispatch('/');
        $this->assertModule('default');
        $this->assertController('index');
        $this->assertAction('index');
    }
}

Бұл сынақты әр кезде іске қостым, PHPUnit менің IndexController элементінде қолданылатын кітапханадағы сыныпты таба алмайтын қате туралы қате хабар жібереді. Сондықтан, себебі Автолауэрмен байланысты нәрсе болуы керек. Отладка жасағаннан кейін, тестілеу Auth плагині арқылы тұрақты Bootstrap арқылы іске қосылатынын білдім және менің кітапханалары кірді. Сондықтан PHPUнит проблемасы қандай болатынын білмеймін. Браузерде бәрі жақсы жұмыс істейді және командалық жолда бақылаусыз сынақтар (мысалы, жаһандық параметрлер) жұмыс істейді.

Мен контролердің сынақтарын алу үшін не істеуім керек екенін білдіру үшін өте ризамын!

edit: my directory structure looks like this (Мен белгілі бір себептермен сыныптарды әр түрлі кітапханаларға бөлдім)

project
 - library1
 - library2
 - project_name
    ->application
    ->library3
    ->library4
    ->tests
       ->>application
          ->>>ControllerTestCase.php
          ->>>Bootstrap.php
       ->>Controller
          ->>>IndexControllerTest.php

менің жолдарым мыналарды қамтиды:

set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH.'/../library3'), get_include_path())));
set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH.'/../library4'), get_include_path())));
set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH.'/../../library1'), get_include_path())));
set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH.'/../../library2'), get_include_path())));
0

2 жауаптар

Мен өзімнің ControllerTestCase сыныпта bootstrap нысанын setUp функциясының орнына конструкторға орнаттым. Міне, бұл сіз үшін бұл өзгерту

public function setUp() {
    $this->bootstrap = array($this, 'appBootstrap');
    parent::setUp();
}

кіреді

public function __construct()
{
    $this->bootstrap = new Zend_Application(
        APPLICATION_ENV,
        APPLICATION_PATH . '/configs/application.ini'
    );
}

және appBootstrap әдісін жою. Бұл сіздің коды мен өзімнің кодтарымның арасында ғана байқаған жалғыз айырмашылық. Мен бұл мәселені шешпейді, бұл жол параметрлері өшірулі болуы мүмкін.

1
қосылды
Мүмкін сіз каталог құрылымын шолуды жібере аласыз ба? Сіздің кітапханаңыз, қолданба және сынақ коды.
қосылды автор Jan-Henk, көзі
Тесттің жүктелу файлында орындалған сұрағыңызға қойылған set_include_path() төрт қоңырауы ма? Өйткені сіз берген код үлгісінде бір ғана қоңырау бар.
қосылды автор Jan-Henk, көзі
Жауабыңызға рахмет! Мен бұл өзгерісті көрдім, бірақ сол қате пайда болды. Мен жол параметрлерін қарап шығамын, бірақ браузерде жұмыс істейтіндіктен, олар дұрыс деп санаймын.
қосылды автор nick, көзі
Ия, мен бұл мәселені редакцияладым.
қосылды автор nick, көзі
Иә, олар енгізілген, қарапайым болу үшін кодты қысқарттым
қосылды автор nick, көзі

Zend Controller үшін сынақ корпуын дұрыс орнатудың ең оңай жолы - zf құралын пайдалану. Онымен контроллерлерді жасау арқылы олар үшін автоматты түрде жасалатын сынақ жағдайлары пайда болады.

zf create controller name index-action-included[=1] module

Келесі жүктеу жолын жасайды:

    defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'testing'));

set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));

require_once 'Zend/Loader/Autoloader.php';

... және контроллерCaseCase:

class IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{

    public function setUp()
    {
        $this->bootstrap = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');
        parent::setUp();
    }

    ....tests.........
}

You have to add the include paths in the bootstrap and register any custom test autoloaders with spl_autoloader. Also, remember to start phpunit with -c test/phpunit.xml

0
қосылды