Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PDOException: There is no active transaction #197

Open
SophieBoewa opened this issue Jun 27, 2022 · 8 comments
Open

PDOException: There is no active transaction #197

SophieBoewa opened this issue Jun 27, 2022 · 8 comments
Labels
bug Something isn't working

Comments

@SophieBoewa
Copy link

SophieBoewa commented Jun 27, 2022

Hey,

When i try to load Fixtures, pdo throws the exception from above. I found a workaround using TransactionHelper from Doctrine, but therefore i have to edit the Doctrine EntityManager, and i don't think that this should be the way to go.

    public function setUp(): void
    {
        parent::setUp();
        $this->client = self::createClient([],[]);
        $this->databaseTool = $this->getContainer()->get(DatabaseToolCollection::class)->get();
        $this->executor = $this->databaseTool->loadFixtures($this->getFixtureClasses());
    }

using this code, i get the following stacktrace:

  1. App\Tests\Controller\AppBundle\AnonymousRedirectCrawlTest::testAnonymousRedirected with data set #0 ('/', '/login')
    PDOException: There is no active transaction
    /var/www/app/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:1854
    /var/www/app/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php:253
    /var/www/app/vendor/doctrine/data-fixtures/lib/Doctrine/Common/DataFixtures/Executor/ORMExecutor.php:76
    /var/www/app/vendor/liip/test-fixtures-bundle/src/Services/DatabaseTools/ORMDatabaseTool.php:130
    /var/www/app/tests/Setup/AbstractCrawlTest.php:70

I'm using PHP 8.1.7, PHPUnit 8.5.27,
liip/test-fixtures-bundle 2.4.0

Maybe you got a solution, on how to fix this Problem.

Ps. It's my first time, writing an Issue, so if sth. is missing, please tell me.

@alexislefebvre
Copy link
Collaborator

Thanks for the report.

Does it work if you call the container in another way? Like this:

$this->databaseTool = static::getContainer()->get(DatabaseToolCollection::class)->get();

@SophieBoewa
Copy link
Author

Hey, sorry for the long wait.

I tried that too, the Error Message stays the same.

@alexislefebvre
Copy link
Collaborator

alexislefebvre commented Jul 6, 2022

I can't reproduce this issue in a Symfony 5.4 project that run tests with PHPUnit 9.5 on PHP 7.4, 8.0 and 8.1, on a MySQL database.

Could you please share a reproducer? The Symfony doc explains how to do it. Please commit the minimal code to reproduce the issue, without forgetting the composer.json and composer.lock files.

Here is my test class:

full code
class ControllerTest extends WebTestCase
{
    protected KernelBrowser $testClient;
    protected AbstractDatabaseTool $databaseTool;

    protected function setUp(): void
    {
        parent::setUp();

        $this->testClient = static::createClient();

        self::bootKernel();

        $container = self::$kernel->getContainer();
        /** @var DatabaseToolCollection $dbToolCollection */
        $dbToolCollection = $container->get(DatabaseToolCollection::class);
        $this->databaseTool = $dbToolCollection->get();
    }

    public function testLeaderboardsNumberOfBadgesNoUser(): void
    {
        $this->databaseTool->loadFixtures([]);

        $path = '/users/leaderboards/badges/';

        $crawler = $this->testClient->request('GET', $path);

        $this->assertSame(404, $this->testClient->getResponse()->getStatusCode());
    }

    protected function tearDown(): void
    {
        parent::tearDown();
        unset($this->databaseTool);
    }
}

@alexislefebvre
Copy link
Collaborator

alexislefebvre commented Jul 8, 2022

I was able to reproduce this issue on a different and unrelated PR (#109):

Config Mysql (Liip\Acme\Tests\Test\ConfigMysql)
 ✘ Load fixtures and purge
   │
   │ PDOException: There is no active transaction
   │
   │ /home/runner/work/LiipTestFixturesBundle/LiipTestFixturesBundle/vendor/doctrine/dbal/src/Driver/PDO/Connection.php:123
   │ /home/runner/work/LiipTestFixturesBundle/LiipTestFixturesBundle/vendor/doctrine/dbal/src/Driver/Middleware/AbstractConnectionMiddleware.php:87
   │ /home/runner/work/LiipTestFixturesBundle/LiipTestFixturesBundle/vendor/doctrine/dbal/src/Logging/Connection.php:83
   │ /home/runner/work/LiipTestFixturesBundle/LiipTestFixturesBundle/vendor/doctrine/dbal/src/Driver/Middleware/AbstractConnectionMiddleware.php:87
   │ /home/runner/work/LiipTestFixturesBundle/LiipTestFixturesBundle/vendor/symfony/doctrine-bridge/Middleware/Debug/Connection.php:173
   │ /home/runner/work/LiipTestFixturesBundle/LiipTestFixturesBundle/vendor/doctrine/dbal/src/Connection.php:1420
   │ /home/runner/work/LiipTestFixturesBundle/LiipTestFixturesBundle/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php:253
   │ /home/runner/work/LiipTestFixturesBundle/LiipTestFixturesBundle/vendor/doctrine/data-fixtures/lib/Doctrine/Common/DataFixtures/Executor/ORMExecutor.php:76
   │ /home/runner/work/LiipTestFixturesBundle/LiipTestFixturesBundle/src/Services/DatabaseTools/ORMDatabaseTool.php:127
   │ /home/runner/work/LiipTestFixturesBundle/LiipTestFixturesBundle/tests/Test/ConfigMysqlTest.php:277

full log (they may be deleted in the future)

The error only appear with PHP 8.0 and 8.1, so it may be due to different versions of dependencies. But the tests are randomized so we can't be sure.


It may be related to doctrine/DoctrineFixturesBundle#348 and/or doctrine/DoctrineFixturesBundle#363

@SophieBoewa
Copy link
Author

Sorry i wasn't able to build a reproducer till this day, i'm trying to work on this now.

@alexislefebvre
Copy link
Collaborator

So it looks like the creation and deletion of the dabase causes this error, I didn't found a solution yet.

Please try this workaround: https://github.com/liip/LiipTestFixturesBundle/blob/2.x/doc/caveats.md#damadoctrinetestbundle

liip_test_fixtures:
    keep_database_and_schema: true

@TymekB
Copy link

TymekB commented Sep 11, 2022

Have you found the solution? I'm facing the same issue.

@alexislefebvre alexislefebvre added the bug Something isn't working label Oct 4, 2022
@Lorenzschaef
Copy link

Same here.

Using:
PHP 8.2
mariadb 10.8.3.
phpunit 9.6.3
symfony: 6.2
doctrine: 2.14
test-fixtures-bundle 2.6.0

    public function setUp(): void
    {
        parent::setUp();
        $this->client = static::createClient();
        $this->databaseTool = static::getContainer()->get(DatabaseToolCollection::class)->get();
    }

    public function testIndexAction(): void
    {
        $this->databaseTool->loadFixtures([Fixtures::class]);
        // ...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants