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');
http://stackoverflow.com/questions/33678689/cakephp-3-model-unit-test-fails-duplicate-key-value

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:postgresql – CakePHP 3:模型单元测试失败 – “重复键值”