3

When I run my PHP unit test I get:

1) Test_Model_Mapper_TestTest::testTest
Argument 1 passed to PHPUnit_Extensions_Database_DataSet_DefaultTableIterator::__construct() must be an array, null given, called in /usr/share/php/PHPUnit/Extensions/Database/DataSet/AbstractXmlDataSet.php on line 134 and defined

/var/www/kosheroven/library/Zend/Test/PHPUnit/Db/Operation/Truncate.php:73
/var/www/kosheroven/tests/ModelTestCase.php:79
/var/www/kosheroven/tests/application/models/mappers/TestTest.php:33

Expected result is for the test to pass, obviously. By sprinkling around a few echoes I discovered that this is caused from within the parent::setUp() call, but I have no idea why. I am completely stuck. Any help would be greatly appreciated.

// /tests/ModelTestCase.php

abstract class Test_ModelTestCase extends Zend_Test_PHPUnit_DatabaseTestCase
{
    public $application;
    protected $_db;
    protected $_model;
    protected $_modelClass;
    protected $_filesDir;

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

        $this->bootstrap = array($this, 'appBootstrap');

        $this->_filesDir  = dirname(__FILE__) . '/files/';
        $this->_filesDir .= str_replace('_', '/', get_class($this));
        $this->_model     = new $this->_modelClass();
        // echo '123'; is printed
        parent::setUp();
        // echo '456'; is not
    }

    public function appBootstrap()
    {
        $this->application->bootstrap();
    }

    protected function getConnection()
    {
        if(empty($this->_db))
        {
            $options = $this->application->getOptions();
            $schema = $options['resources']['db']['params']['dbname'];
            $db = $this->application->getBootstrap()->getPluginResource('db')
                    ->getDbAdapter();

            $this->_db = $this->createZendDbConnection($db, $schema);
        }

        return $this->_db;
    }

    protected function getDataSet()
    {
        return $this->createXmlDataSet(dirname(__FILE__) . '/files/seed.xml');
    }
}

// /tests/Model/Mapper/TestTest.php

class Test_Model_Mapper_TestTest extends Test_ModelTestCase
{
    protected $_modelClass = 'Application_Model_Mapper_Ingredients';

    public function testTest()
    {
        $this->assertTrue(true);
    }
}

3 Answers 3

1

Not sure if it will help you, but the problem may be with: $this->bootstrap = array($this, 'appBootstrap');

You see $bootstrap property does not exist in Zend_Test_PHPUnit_DatabaseTestCase, unlike for Zend_Test_PHPUnit_ControllerTestCase. So I think that your bootstrap method is not called.

Thus you could try to replace line $this->bootstrap = array($this, 'appBootstrap'); with $this->appBootstrap();.

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

Comments

1

I had the same problem today. The reason here was, that the XML fixture was generated by MySQLDump and missing the <database name="xyz"> node. This turned $this->tables in PHPUnit into NULL instead Array.

Comments

0

Full solution and code at http://www.unexpectedit.com/zend-php/testing-database-model-with-phpunit-on-zend-studio

Edit application/configs/application.ini

[testing : production]
resources.db.adapter = "pdo_mysql"
resources.db.params.host = 127.0.0.1
resources.db.params.port = 8889
resources.db.params.username = root
resources.db.params.password = root
resources.db.params.dbname = "test_myproject_com"
xmlseeds.folder = APPLICATION_PATH "/../tests/xmlseeds/"

Create folders and file MyProject/library/Application/Test/PHPUnit/DatabaseTestCase/Abstract.php

Create folders and file MyProject/tests/application/models/ProjectTest.php

Create files /tests/xmlseeds/*.xml

I. Pascual www.unexpectedit.com

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.