我正在使用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字段设置每个记录。从夹具中删除它们会起作用,但是会破坏依赖于一些关系数据的其他单元测试。