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



当我试图用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);
    }
}

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
    ); 
}

最新更新