我正在尝试使用CakePhP 2.3和PHPUnit 2.7进行单元测试。我想测试客户控制器中的索引功能。 在我的控制器中,我有:
public function index() {
$this->Customer->recursive = -1;
$data = $this->paginate('Customer', array( 'Customer.status'=>'active'));
$this->set('customers', $data);
}
我尝试按照book.cakephp.org中的示例进行操作,因此我创建了Fixture类,其中我导入了Customer模式和所有记录。
class CustomerFixture extends CakeTestFixture{
public $import = array('model' => 'Customer', 'records' => true);
}
最后我的测试类看起来像这样:
class CustomersControllerTest extends ControllerTestCase {
public $fixtures = array('app.customer');
public function testIndex() {
$result = $this->testAction('/customers/index');
debug($result);
}
}
当我运行测试时,出现以下错误:
数据库错误 错误:SQLSTATE [23000]:完整性约束违规:1062键'PRIMARY'重复输入'8'
你有什么想法可能是什么问题吗?
答案 0 :(得分:1)
在app / Config文件夹的database.php中,你必须添加一个$ test变量。
例如
class DATABASE_CONFIG {
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => true,
'host' => 'localhost',
'port' => 3306,
'login' => 'root',
'password' => 'xxxx',
'database' => 'mydatabase',
'encoding' => 'utf8'
);
public $test = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'port' => 3306,
'login' => 'root',
'password' => 'xxxx',
'database' => 'mydatabase_test',
'encoding' => 'utf8'
);
}
然后您的单元测试将使用mydatabase_test来测试您的代码。因为现在它使用默认数据库。