1

当我尝试使用 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);
    }
}
4

1 回答 1

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
    ); 
}
于 2013-12-31T16:09:38.607 回答