postgresql – CakePHP 3:模型单元测试失败 – “重复键值”

前端之家收集整理的这篇文章主要介绍了postgresql – CakePHP 3:模型单元测试失败 – “重复键值”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Postgres(我认为与问题有关)和CakePHP 3。

我有以下单元测试来检查,以确保模型可以保存有效的数据集。当我运行以下测试时,使用标准的“烘烤”模型单元测试,我得到以下错误

我认为这是问题:

我们正在使用灯具添加一些基本数据。这是我认为可能导致问题的唯一地方。为了增加信任,当单元测试运行时,我运行以下命令获取下一个自动递增的id值,它返回1,即使它在非测试数据库中返回了正确的数字。选择nextval(pg_get_serial_sequence(‘agencies’,’id’))作为new_id;

单位测试:

public function testValidationDefault()
{
    $agencyData = [
        'full_name' => 'Agency Full Name','mode' => 'transit','request_api_class' => 'Rest\Get\Json','response_api_class' => 'NextBus\Generic','realtime_url_pattern' => 'http://api.example.com','routes' => '{"123": {"full_route": "123 Full Route","route_color": "#123456"}}'
    ];

    $agency = $this->Agencies->newEntity($agencyData);
    $saved = $this->Agencies->save($agency);
    $this->assertInstanceOf('App\Model\Entity\Agency',$saved);
}

错误

PDOException: sqlSTATE[23505]: Unique violation: 7 ERROR:  duplicate key value violates unique constraint "agencies_pkey"
DETAIL:  Key (id)=(1) already exists.

我试过的东西

>将相同的代码复制到控制器中,并在表中成功添加实体。
>添加一个ID为200.同样的错误出现。

更新1

这个夹具具有ID字段设置每个记录。从夹具中删除它们会起作用,但是会破坏依赖于一些关系数据的其他单元测试。

我不喜欢这个解决方案,但在保存实体之前添加以下内容可以正常工作。
$this->Agencies->deleteAll('1=1');

猜你在找的Postgre SQL相关文章