Я использую Postgres (что, я думаю, связано с проблемой), и CakePHP 3.
У меня есть следующий unit test, чтобы просто проверить, может ли этот набор данных быть сохранен моделью. Когда я запускаю следующий тест, со стандартной "bake'd" Model unit test, я получаю ошибку ниже.
Я думаю, что это проблема:
Мы используем приборы для добавления некоторых базовых данных. Это единственное место, которое, я думаю, может вызвать проблемы. Чтобы добавить к этому достоверность, во время выполнения модульных тестов я выполнил следующую команду, чтобы получить следующее значение auto-incrementing id
, и оно вернулось 1, даже если оно вернуло правильный номер в не-тестовой БД. Select nextval(pg_get_serial_sequence('agencies', 'id')) as new_id;
Unit Test:
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.
Что я пробовал
- Скопировал этот же код в контроллер и успешно добавил объект в таблицу.
- Добавление идентификатора 200. Появится такая же ошибка.
Обновление 1
У этого прибора есть поле ID, задающее каждую запись. Удаление их из прибора работает, но оно прерывает другие модульные тесты, которые полагаются на некоторые реляционные данные.