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