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