cakePHP中的灯具名称(测试)

时间:2012-08-20 10:18:54

标签: unit-testing postgresql cakephp cakephp-2.0 fixtures

我将灯具保存在:app / test / fixture /目录

和e.x. app / test / fixture / UserRoleHistoryFixture.php看起来像这样

<?php

 class UserRoleHistoryFixture extends CakeTestFixture {
    public $import = array('model' => 'UserRoleHistory', 'records' => false, 'connection' => 'test');
}

app / Test / Fixture / UserFixture.php看起来像这样

 class UserFixture extends CakeTestFixture {
    public $import = array('model' => 'User', 'records' => true, 'connection' => 'test');
}

所有灯具看起来都是这样(唯一的区别是somtimes记录设置为true) 然后在我的UserTest.php(模型)中使用它的方式:

class UserTest extends CakeTestCase {
public $fixtures = array('app.user', 'app.user_role','app.session', 'app.users_activity', 'app.user_role_history'
    );
 public $autoFixtures = false;
 public function setUp() {
    parent::setUp();


    $this->loadFixtures('User','UserRoleHistory','Session','UserRole','UsersActivity');
));

我在尝试做一些测试时得到的PDO错误和堆栈跟踪,我可能用错误的方式调用了吗?猜猜这是我如何制作我的夹具但不知道的问题.. 谢谢您的想法!

编辑: 我的问题变了一点,有错误和堆栈跟踪:

PDOException: SQLSTATE[23503]: Foreign key violation: 7 BŁĄD: modyfikacja lub usunięcie     na tabeli "users" narusza klucz obcy "user_role_history_user_id" tabeli "user_role_history"      DETAIL: Klucz (id)=(26381) ma wciąż odwołanie w tabeli "user_role_history".
Test case: UserTest(testUserNameExists)
Stack trace:
C:\Program Files (x86)\PostgreSQL\EnterpriseDB-    ApachePHP\apache\www\soig\www\konkursy2.0\lib\Cake\Model\Datasource\DboSource.php : 436
C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\apache\www\soig\www\konkursy2.0\lib\Cake\Model\Datasource\DboSource.php : 403
C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\apache\www\soig\www\konkursy2.0\lib\Cake\Model\Datasource\Database\Postgres.php : 309
C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\apache\www\soig\www\konkursy2.0\lib\Cake\TestSuite\Fixture\CakeTestFixture.php : 232
C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\apache\www\soig\www\konkursy2.0\lib\Cake\TestSuite\Fixture\CakeFixtureManager.php : 236
C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\apache\www\soig\www\konkursy2.0\lib\Cake\TestSuite\CakeTestCase.php : 191
C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\apache\www\soig\www\konkursy2.0\app\Test\Case\Model\UserTest.php : 16
C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\apache\www\soig\www\konkursy2.0\vendors\PHPUnit\Framework\TestCase.php : 801
C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\apache\www\soig\www\konkursy2.0\app\webroot\test.php : 92

我得到的还有

 Fatal Error (256): [PDOException] You cannot serialize or unserialize PDOStatement  instances
 #0 [internal function]: PDOStatement->__sleep()
 etc ;/

我看到第一个问题是关于foregin密钥,并且当使用test来删除表用户时,存在foregin密钥违规,但是关于如何创建数据库有问题吗?

1 个答案:

答案 0 :(得分:3)

您从'test'数据源导入,删除您的灯具中的数据。它从默认值拉出,或者如果你愿意,可以指定另一个拉出来。它将在'test'中创建而不是从中导入