【问题标题】:Cakephp 2.5.3. PHPUnit. Testing function in Controller that doesn't return value?蛋糕PHP 2.5.3。 PHP 单元。控制器中的测试函数不返回值?
【发布时间】:2014-09-25 18:47:13
【问题描述】:

我是测试和 PHPUnit 的新手。我有一个让我头疼的功能。是时候改变我的态度并尝试单元测试和某种 TDD 了。我阅读了 cakePHP 文档和许多这样的文章: http://programinginreallife.blogspot.com.ar/2013/07/test-driven-designtdd-in-cakephp-2.html http://programinginreallife.blogspot.com.ar/2013/08/test-driven-designtdd-in-cakephp-2-part.html 在所有使用returns 或$this->vars 来检查断言的文章中。我的函数没有返回或 SET 变量。我需要检查的数组保存在数据库中。为了解决这个问题,我用这个数组做了一个 SET,但我不知道是不是最好的解决方案。

这是我不工作的(还)功能:

<?php
App::uses('AppController', 'Controller');
class CuentasController extends AppController {
    public function pongoAsientos(){
        $this->autoRender = false;

        $club_Nro = 2;
        $añoInicio = 2013;
        $numeroInicio = 8156;//9042;

        $grabaCaja = array();
        $grabaTest = array();
        $grabaCajaTest = array();

        $clubs = $this->Cuenta->Socio->Club->find('first',array('recursive' => -1,
                                                              'conditions' => array('Club.id' => $club_Nro),
                                                              'fields' => array('Club.fechaBalance')));


        list($diaBalance,$mesBalance) = explode("-",$clubs['Club']['fechaBalance']);
        $inicioBalance = date('Y-m-d',mktime(0,0,0,$mesBalance, $diaBalance,intval($añoInicio)));
        $finBalance    = date('Y-m-d',mktime(0,0,0,$mesBalance, $diaBalance,intval($añoInicio+1)));

        $cuentas = $this->Cuenta->find('all',array('recursive' => 0,
                                                   'conditions' => array('PlanCuenta.club_id' => $club_Nro,
                                                                         //'Cuenta.fecha >' => $inicioBalance,
                                                                         //'Cuenta.fecha <=' => $finBalance,
                                                                         'Cuenta.id' => $numeroInicio // Solo para el test
                                                                         //'Cuenta.id >=' => $numeroInicio // Sacar en produccion
                                                                    ),
                                                   'order' => array('Cuenta.fecha ASC','Cuenta.id ASC'),
                                                   //'limit' => 1
                                                   ));

        $nroAsiento = 0;
        $nroOrden = 1;
        $ultimo = 'qwerty';

        foreach ($cuentas as $key => $cuenta){  
            $grabaCaja['Cuenta']['fecha'] = $cuenta['Cuenta']['fecha'];
            $grabaCaja['Cuenta']['plan_cuenta_id'] = $cuenta['Cuenta']['plan_cuenta_id'];
            $grabaCaja['Cuenta']['socio_id'] = $cuenta['Cuenta']['socio_id'];
            $grabaCaja['Cuenta']['detalle'] = $cuenta['Cuenta']['detalle'];
            $grabaCaja['Cuenta']['monto'] = $cuenta['Cuenta']['monto'];

            if ($cuenta['Cuenta']['socio_id'] == '1332'){
                $cuenta['Cuenta']['asiento'] = ++$nroAsiento;
                $grabaCaja['Cuenta']['asiento'] = $nroAsiento;
                $grabaCaja['Cuenta']['plan_cuenta_id'] = '226';
                $cuenta['Cuenta']['plan_cuenta_id'] = '349';
                $cuenta['Cuenta']['socio_id'] = NULL;
                $grabaCaja['Cuenta']['monto'] *= -1;
                if($cuenta['Cuenta']['monto'] > 0 ){
                    $cuenta['Cuenta']['orden'] = $nroOrden;
                    $grabaCaja['Cuenta']['orden'] = $nroOrden+1;
                } else {
                    $cuenta['Cuenta']['concepto']    = 'Gastos Varios';
                    $grabaCaja['Cuenta']['concepto'] = 'Gastos Varios';
                    $cuenta['Cuenta']['orden']    = $nroOrden+1;
                    $grabaCaja['Cuenta']['orden'] = $nroOrden;
                    $cuenta['Cuenta']['monto'] *=-1;
                }
            } else if ($cuenta['Cuenta']['detalle'] != 'Apertura de libros' && 
                    stripos($cuenta['Cuenta']['detalle'],'Cierre de libros') === FALSE &&
                            stripos($cuenta['Cuenta']['detalle'],'Vuelos') === FALSE &&
                                stripos($cuenta['Cuenta']['detalle'],'Hangaraje') === FALSE &&
                                    stripos($cuenta['Cuenta']['detalle'],'Cuota')  === FALSE) {

                $cuenta['Cuenta']['asiento'] = ++$nroAsiento;
                $grabaCaja['Cuenta']['asiento'] = $cuenta['Cuenta']['asiento'];

                $nroOrden = 1;

                $ultimo = $cuenta['Cuenta']['detalle'];

                if($cuenta['Cuenta']['monto'] > 0 ){
                    $cuenta['Cuenta']['orden'] = $nroOrden;
                    $grabaCaja['Cuenta']['orden'] = $nroOrden+1;
                } else {
                    $cuenta['Cuenta']['concepto']    = 'Cobranza';
                    $grabaCaja['Cuenta']['concepto'] = 'Cobranza';
                    $cuenta['Cuenta']['orden']    = $nroOrden+1;
                    $grabaCaja['Cuenta']['orden'] = $nroOrden;
                }

            } else {
                if (stripos($cuenta['Cuenta']['detalle'],$ultimo) === FALSE){
                    $cuenta['Cuenta']['asiento'] = ++$nroAsiento;
                    $nroOrden = 1;
                    $cuenta['Cuenta']['orden'] = $nroOrden;
                    $cuenta['Cuenta']['concepto'] = $cuenta['Cuenta']['detalle'];
                    $ultimo = $cuenta['Cuenta']['detalle'];
                }  else {
                    $cuenta['Cuenta']['asiento'] = $nroAsiento;
                    $cuenta['Cuenta']['orden'] = ++$nroOrden;
                    $ultimo = $cuenta['Cuenta']['detalle'];
                    $cuenta['Cuenta']['concepto'] = $cuenta['Cuenta']['detalle'];
                }
            }
            $graba['Cuenta'] = $cuenta['Cuenta'];
            $this->Cuenta->id = $cuenta['Cuenta']['id'];
            $this->Cuenta->save($graba); 

            $grabaTest[$key] = $graba;

            if (isset($grabaCaja)){
                $grabaCaja['Cuenta']['plan_cuenta_id'] = '226';
                $grabaCaja['Cuenta']['socio_id'] = null;
                $grabaCaja['Cuenta']['monto'] *= -1;
                if ($cuenta['Cuenta']['socio_id']){
                    $socio = $this->Cuenta->Socio->find('first',array('recursive' => 0,
                                                        'conditions' => array('Socio.id' => $cuenta['Cuenta']['socio_id'])));
                    $nombre = $socio['Persona']['apellido'];
                    if (isset($socio['Persona']['nombre'])){
                        $nombre .= ', '.$socio['Persona']['nombre'];
                    }
                    $grabaCaja['Cuenta']['detalle'] .= ' '.$nombre;
                }

                $this->Cuenta->create();
                $this->Cuenta->save($grabaCaja); 
                $grabaCajaTest[$key] = $grabaCaja;
            }
            ////////////////////////////////////////////
            /// ONLY FOR TEST
            ///
            $this->set('grabaTest',$grabaTest);
            $this->set('grabaCajaTest',$grabaCajaTest);
            ///
            ///
            ////////////////////////////////////////////
        }
    }
}

这是我的测试之一:

<?php
App::uses('CuentasController', 'Controller');


/**
 * CuentasController Test Case
 *
 */
class CuentasControllerTest extends ControllerTestCase {

/**
 * index method shared by 
 * testPongoAsientos_AperturaDeLibros()
 * testPongoAsientos_MontoMenorCero()
 * testPongoAsientos_id_socio_1332()
 *
 *
 * @param string $enviado
 * @return void
 */
    private function pongoAsientos($enviado){

        $this->generate('Cuentas', array(
            'models' => array(
                'Cuenta' => array(
                    'find'     
                )
            )
        ));

        $this->controller->Cuenta->expects($this->at(0))
            ->method('find')
            ->with('all')
            ->will($this->returnValue($enviado))
            ;

        $result = $this->testAction('/cuentas/pongoAsientos', array('method' => 'GET',
                                                                    'return' => 'contents',
                                                                    $this->headers['Location']
                                                                    //'data' => $data
                                                                    ));
        debug($result);
    }

/**
 * testPongoAsientos_AperturaDeLibros method
 *
 * @return void
 */
    public function testPongoAsientos_AperturaDeLibros() {
        $enviado = array(
            array(
                'Cuenta' => array(
                    'id' => '9000',
                    'asiento' => '1',
                    'fecha' => '2013-06-01',
                    'concepto' => 'Apertura de libros',
                    'orden' => '1',
                    'plan_cuenta_id' => '234',
                    'socio_id' => '1309',
                    'detalle' => 'Apertura de libros',
                    'monto' => '11935'
                )
            )
        );
        $this->pongoAsientos($enviado);

        $esperado = array(
            array(
                'Cuenta' => array(
                    'id' => '9000',
                    'asiento' => (int) 1,
                    'fecha' => '2013-06-01',
                    'concepto' => 'Apertura de libros',
                    'orden' => (int) 1,
                    'plan_cuenta_id' => '234',
                    'socio_id' => '1309',
                    'detalle' => 'Apertura de libros',
                    'monto' => '11935'
                )
            ),
        );
        $this->assertEquals($esperado, $this->vars['grabaTest']);
    }
}

测试工作正常,但我不是正确的方法。任何想法或建议将不胜感激。

提前致谢。

【问题讨论】:

    标签: unit-testing cakephp phpunit


    【解决方案1】:

    我回答我自己的问题。这比我想象的要容易。我不知道是否是最好的方法,但有效。 我刚刚从我的测试中读取了数据库!!!

    <?php
    App::uses('CuentasController', 'Controller');
    App::uses('Cuenta', 'Model'); // <-- Add This
    
    /**
     * CuentasController Test Case
     *
     */
    class CuentasControllerTest extends ControllerTestCase {
    
    /**
     * Fixtures
     *
     * @var array
     */
        public $fixtures = array(
            'app.cuenta',
            'app.persona'
        );
    
    /**
     * setUp method
     *
     * @return void
     */
        public function setUp() {
            parent::setUp();
            $this->Cuenta = ClassRegistry::init('Cuenta');
        }
    
    /**
     * tearDown method
     *
     * @return void
     */
        public function tearDown() {
            unset($this->Cuenta);
            parent::tearDown();
        }
    
    /**
     * testPongoAsientos_global method
     *
     * @return void
     */
        public function testPongoAsientos_global() {
    
            // Call the function
            $this->testAction('/cuentas/pongoAsientos/1');
    
            // search in database
            $resultFromDB = $this->Cuenta->find('all');
    
            $myExpectedResult = array(/* Something here */)
    
            $this->assertEquals($myExpectedResult,$resultFromDB ,'testPongoAsientos_global');
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多