3

フィクスチャを app/test/fixture/ ディレクトリに保持します

そして例 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');
}

すべてのフィクスチャはこのように見えます (唯一の違いは、いくつかのレコードが true に設定されていることです) 次に、私の UserTest.php(model) im で、この方法を使用します:

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

そして、テストi PDOエラーとスタックトレースを実行しようとしているときに得たものは、sthを間違った方法で呼び出した可能性がありますか? フィクスチャの作り方に問題があると思いますが、わかりません..アイデアをありがとう!

編集: 私の問題は少し変わりました。エラーとスタック トレースがあります:

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 ;/

最初の問題は外部キーに関するもので、テストを使用してテーブル ユーザーを削除すると、外部キー違反が発生しますが、データベースの作成方法に関する問題ですか?

4

1 に答える 1

3

「テスト」データソースからインポートすると、フィクスチャでそれが削除されます。デフォルトからプルするか、必要に応じて別のプル元を指定します。そこからインポートするのではなく、「テスト」で作成します

于 2012-08-23T15:48:40.870 に答える