单元测试Kohana ORM Model抛出异常错误

时间:2013-08-17 14:56:26

标签: orm phpunit kohana

当我尝试使用PHPUnit测试我的Kohana(3.3.0)ORM模型时,它会抛出以下异常。

Website_MetadataTest::testCountMetadata
ErrorException: Invalid argument supplied for foreach()

/home/liva/Workspace/htdocs/Revoyance-Local/modules/orm/cla sses/Kohana/ORM.php:1014
/home/liva/Workspace/htdocs/Revoyance-Local/modules/orm/classes/Kohana/ORM.php:1041
/home/liva/Workspace/htdocs/Revoyance-Local/modules/orm/classes/Kohana/ORM.php:1001
/home/liva/Workspace/htdocs/Revoyance-Local/tests/classes/Website/MetadataTest.php:21

我检查了所有这些文件,似乎ORM.php无法从数据库加载表列列表。

你们有过这个错误吗?你找到了解决办法吗?我怀疑我错过了某些配置,但我不知道在哪里!

我的测试类看起来像这样

require DOCROOT . 'tests/classes/DatabaseTestCase.php';

class Website_MetadataTest extends DatabaseTestCase
{
protected $metadata;

    public function getDataSet()
    {
        return $this->createXMLDataSet(DOCROOT.'tests/_data/website-metadata.xml');
    }

public function setUp()
    {
        parent::setUp();

        $this->metadata = ORM::factory('Website_Metadata')->where('website_id', '=', 1)->find_all();
    }

    public function testCountMetadata()
    {
        $this->assertCount(4, $this->metadata);
    }
}

1 个答案:

答案 0 :(得分:0)

似乎PHPUnit正在使用PDO进行数据库访问。 Kohana的PDO驱动程序没有实现list_columns,因为PDO没有获取表描述的本机支持。相反,它会引发异常。

使用PDO时,解决方法是列出Model类中的所有列,如下所示:

class Model_Website_Metadata extends ORM
{
    protected $_table_name = 'website_meta';
    protected $_primary_key = 'website_metadata_id';

    protected $_table_columns = array(
        'website_metadata_id' => NULL,
        'website_id' => NULL,
        'meta_page_id' => NULL,
        'title' => NULL,
        'description' => NULL,
        'logo' => NULL,
        'header' => NULL,
        'header2' => NULL,
        'pagination' => NULL
    ); 
}