Zend Framework: Zend_Test ile Başlarken

3 Cevap php

Herkes Zend_Test kurarken herhangi bir başarı elde etti? Ne senin yöntem / yaklaşım oldu ve size testler / test suit nasıl çalıştırırım?

Zaten PHPUnit yüklü ve çalışma var. Şimdi bazı basit denetleyicisi testleri yazmak için çalışıyorum. Zend Framework belgelerine autoloading ben yapmadım, hangi kurulum olduğunu varsayar. you autoload için hangi yöntemi uygun dosyaları kullanabilirim? Benim normal önyükleme dosyasında bunu, ama ben bir içerir demet ve yolları kurma ile benim Testi kaplamak istemiyorum. Soyut bir denetleyici test case sınıf gitmek için yol olurdu?

Ne belgelere gibi önyükleme eklentisi kullandığı hakkında ... nasıl sizin testleri önyükleyemez, ya da bunu farklı bir şekilde yapmak ister mi bu? Ben normal önyükleme dosyası elimden kadar çok tekrar kullanmak istiyorum. Nasıl test ve normal kullanım için benim ön yükleme kadar KURU gerekir?

İşte benim test kadar bulunuyor:

<?php

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

    public function appBootstrap()
    {
        $this->frontController->registerPlugin(new Bootstrapper('testing'));
    }

    public function testIndexAction()
    {
        $this->dispatch('/index');
            $this->assertController('index');
            $this->assertAction('index');
    }

}

//straight from the documentation
class Bootstrapper extends Zend_Controller_Plugin_Abstract
{
    /**
     * @var Zend_Config
     */
    protected static $_config;

    /**
     * @var string Current environment
     */
    protected $_env;

    /**
     * @var Zend_Controller_Front
     */
    protected $_front;

    /**
     * @var string Path to application root
     */
    protected $_root;

    /**
     * Constructor
     *
     * Initialize environment, root path, and configuration.
     *
     * @param  string $env
     * @param  string|null $root
     * @return void
     */
    public function __construct($env, $root = null)
    {
        $this->_setEnv($env);
        if (null === $root) {
            $root = realpath(dirname(__FILE__) . '/../../../');
        }
        $this->_root = $root;

        $this->initPhpConfig();

        $this->_front = Zend_Controller_Front::getInstance();
    }

    /**
     * Route startup
     *
     * @return void
     */
    public function routeStartup(Zend_Controller_Request_Abstract $request)
    {
        $this->initDb();
        $this->initHelpers();
        $this->initView();
        $this->initPlugins();
        $this->initRoutes();
        $this->initControllers();
    }

    // definition of methods would follow...
}

Ben ne yapmalıyım?

3 Cevap

İşte ben bunu işe almak için yaptım:

Öncelikle, biz autoloading sorunu çözmek gerekir. Biz tüm testler içerecek bir dosya oluşturarak bunu, ve testler dizine koymak gerekir. Not: Ben hemen hemen benim / public / index.php gelen tüm bu kopyalandı.

# /tests/loader.php

<?php

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

set_include_path( APPLICATION_PATH . '/../library' . PATH_SEPARATOR .
    			  APPLICATION_PATH . '/models' . PATH_SEPARATOR .
    			  APPLICATION_PATH . '/forms' . PATH_SEPARATOR .
    			  get_include_path() );

require_once "Zend/Loader.php";
Zend_Loader::registerAutoload();

İkincisi, bizim test bu dosyayı eklemeniz gerekir. Bizim test dosyası / in / test / uygulama / denetleyicileri olduğunu. Benim önyükleme dosyası QuickStart tutorial olarak aynı şekilde çalışır beri bir eklenti olarak benim ön yükleme kullanmak için gitmiyorum. Ben sadece kamu $ yükleyici olarak konumunu ayarlayarak ona bağlarsınız. Ne zaman Zend_Test_PHPUnit_ControllerTestCase yapıları, biz burada ayarlanmış önyükleme dosyası arayacaktır.

<?php

require_once '../../loader.php';

class IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
    public $bootstrap = '../../../application/bootstrap.php';

    public function testIndexAction()
    {
    	$this->dispatch('/index');
        $this->assertController('index');
        $this->assertAction('index');
    }

}

Ve işte bu! Benim önyükleme dosyası zaten bir eklenti olsaydı, bu biraz daha karmaşık olabilir, ama öyle değil, çünkü bu süper kolay.

Kullanmak yerine

require_once "Zend/Loader.php";
Zend_Loader::registerAutoload();

içine değiştirmek

require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();

registerAutoLoad () 1.8.0 itibariyle önerilmemektedir

Ben her zaman bazı temel başlatma şeyler yapan bir basit TestHelper.php kullanın. Bu dosya her test dava dosyasına dahil edilir. Filtreler, doğrulayıcılar ve formları kullanarak özellikle ben büyük bağımlılık sorunları yaşadım ben yapmak şeylerden biri, Zend Framework autoloader kaydediyor. Tüm gerekli dosyaları izlemek ve test durumda el onlara dahil etmek neredeyse imkansız.

Bu prosedür, gerçek uygulama için aynı olması gerektiği gibi Sen belki bootstrapping eklenti içine autoloading başlatma ve dahil yolların kurulum taşıyabilirsiniz.