如何在保存 Associates Cakephp 时测试 Add
Posted
技术标签:
【中文标题】如何在保存 Associates Cakephp 时测试 Add【英文标题】:how to test Add when saving Associates Cakephp 【发布时间】:2012-11-21 12:47:38 【问题描述】:如何测试这样的方法:
public function add()
if (!empty($this->request->data))
$this->Contest->create();
if ($this->Contest->saveAll($this->request->data))
$contestStage['name'] = 'First - ' . $this->request->data['Contest']['name'];
$contestStage['contest_id'] = $this->Contest->id;
if ($this->Contest->ContestStage->save($contestStage))
$this->setMessage(__ADD_OK, 'Konkurs');
$this->redirect(array(
'action' => 'view',
$this->Contest->id
));
else
$this->setMessage(__ADD_ERROR, 'Konkurs');
else
$this->setMessage(__ADD_ERROR, 'Konkurs');
我的测试方法:
public function testAdd()
$this->generateWithAuth(self::ADMIN); // genereting controller here
$url = $this->getUrl('add');
$options2 = array(
'method' => 'post',
'data' => array(
'Contest' => array(
'id' => 3,
'owner_id' => 1,
'name' => 'Testing',
'created' => '2012-11-16 12:02:33.946',
),
),
);
$this->testAction($url, $options2);
$this->assertArrayHasKey('Location', $this->headers, 'No redirection');
$this->assertEquals($this->Contest->hasAny(array('Contest.name' => 'Testing')), true);
$messages = Set::extract('flash.message', CakeSession::read('Message'));
我收到的是
PDOEXCEPTION
SQLSTATE[23505]: Unique violation: 7 BŁĄD: double key value violates a constraint
唯一性“contest_stages_pkey”详细信息:密钥 (id)=(1) 已经存在。
因为这是真的,我有一个 id=1 的比赛阶段 为什么它不使用下一个;
【问题讨论】:
【参考方案1】:Cakephp 没有记录如何很好地测试这有点奇怪。
问题是您插入了两次竞赛 ID。您应该确保您使用的数据库具有测试前缀(或任何您喜欢的)并清除测试表。
作为替代方案,您可以使用固定装置。数据会产生更好的测试用例,因为它会为您预先填充数据,以便您随时了解数据库中的内容。仍然确保使用前缀,我犯了一次没有这样做的错误,并且每次都会吹走我的整个数据库
祝你好运
【讨论】:
以上是关于如何在保存 Associates Cakephp 时测试 Add的主要内容,如果未能解决你的问题,请参考以下文章