- Symfony v6.4.8
- doctrine/orm 2.19.5
- phpunit/phpunit 9.6.19
Он выполняет запрос API в другой системе, получает эти данные, объединяет их с данными локальной базы данных и создает новую запись в моей базе данных.
У меня проблема в том, что / после persist()/flush() в базе данных: иногда поле $contract->eup имеет значение NULL в база данных.
Код: Выделить всё
eup
Код: Выделить всё
private function saveContract(EntityManager $em, array $data): ContractData
{
$contract = new ContractData();
// [... some more variables]
$contract->setEup($data['eup']); // example: "2024-06-29"
$em->persist($contract);
$em->flush();
return $contract;
}
Код: Выделить всё
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ContractDataControllerTest extends WebTestCase
{
public static function contractProvider(): array
{
$testCases = array(
['18fac35b-4afe-476e-9094-1437deeb6f0a', 'stringValue1', '2024-06-29'],
);
return $testCases;
}
/**
* @covers \App\Controller\API\ContractDataController::contract
* @dataProvider contractProvider
*/
public function testGetContractWhileLoggedIn($id, $expectValue1, $expectEup): void
{
$uri = $this->getUriWithSignature('/api/contract/', $id);
$client = static::createClient();
$client->disableReboot();
$client->setServerParameter('HTTP_Authorization', 'Bearer ' . $_ENV['TOKEN']);
$client->request('GET', $uri);
$this->assertResponseStatusCodeSame(200);
$responseData = json_decode($client->getResponse()->getContent(), true);
$this->assertSame($expectValue1, $responseData['value1']);
// the other values are working, there are more values to test, code is simplyfied, only eup is empty at database.
$this->assertSame($expectEup, $responseData['valueEup']);
}
}
Но когда я запускаю тест phpunit php bin/phpunit --filter myTest, он вызывает API, создается запись .
Strong> в базе данных, но поле eup имеет значение NULL.
- Другие поля этой записи хранятся < strong>правильно при тесте.
- Также можно записать значение этого поля в другие поля.
- Также пробовал использовать более короткую строку, но она тоже не сохраняется.
- Я также провел тест с помощью xdebug и могу подтвердить (вместе с моим коллегой), что $contract->eup установлен и заполнен строкой в $em->persist($contract) ; но когда мы смотрим после сброса в базе данных SELECT * FROM ..., поле eup имеет значение NULL.
Обновление 2:
Я обновил конфигурацию регистратора/packages/monolog.yaml< /p>
Код: Выделить всё
# add Doctrine-Handler
doctrine:
type: stream
path: '%kernel.logs_dir%/doctrine.log'
level: debug
channels: ["doctrine"]
Код: Выделить всё
Executing statement: INSERT INTO contract_data (contract_number) VALUES (?) (parameters: array{"1":"XYZ123456"}, types: array{"1":2})
Однако я не знаю, что изменить, поскольку это поле там используется.< /п>
Подробнее здесь: https://stackoverflow.com/questions/786 ... es-null-in