【问题标题】:Fixtures names in cakePHP (test)cakePHP 中的装置名称(测试)
【发布时间】:2012-08-15 16:17:01
【问题描述】:

我将固定装置保存在: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');
}

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

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

我看到第一个问题是关于外键的,当测试用于删除表用户时,存在外键冲突,但它是如何创建数据库的问题吗?

【问题讨论】:

  • 确保您的套管正确! /Test/Fixture/ 例如文件夹名称。由于 CI,它可能适用于 Windows,但不适用于其他系统。
  • 我有一个这样的文件夹结构:Test/ 包含这 3 个:Case/ Fixture/ Group/ Case 扩展到: Behaviour/ Component/ Controller/ Helper/ Model/ AllTest.php 我正在工作在 Windows 7 上
  • 更多与错误相关的信息可能会有很大帮助。即使它是输出的复制粘贴。听起来这可能是您创建表格的方式的问题。拥有多个foreign_key 可能会导致这样的错误。可能会使用蛋糕烘焙来创建具有基础知识的固定装置/外壳,并从那里添加/调整您需要的东西。
  • Tom 和如何使用 cake bake 来制作灯具?我是测试新手,所以还不知道这样的事情。
  • 使用谷歌翻译,错误提示Foreign key violation: 7 ERROR: modify or delete the table "users" violates foreign key constraint "user_role_history_user_id" table "user_role_history" DETAIL: Key (id) = (26381) is still referenced in the table "user_role_history".

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


【解决方案1】:

您从“测试”数据源导入,将其从您的设备中删除。它从默认值中提取,或者如果您愿意,可以指定另一个提取值。它将在“测试”中创建而不是从中导入

【讨论】:

  • 你的意思是:'connection' => 'test' ?但是当我的测试数据库与我的默认数据库完全相同时,这有关系吗?因为我的测试数据库只是真实数据库的本地副本
  • 你的 test db 应该是空的,testsuite 会根据fixtures 构建表并在运行测试后删除它们
猜你喜欢
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-27
  • 2011-02-01
  • 2016-09-12
  • 1970-01-01
相关资源
最近更新 更多