Skip to content

[3.x] Check if Db::$dbh is not null before calling inTransaction() #32

@simonhammes

Description

@simonhammes

Error message:

Error: Call to a member function inTransaction() on null in <PROJECT_DIR>/vendor/codeception/module-db/src/Codeception/Lib/Driver/Db.php on line 94

The error did not occur when using Codeception 4.
Maybe it has to do with a different order of PHP internally calling __destruct() methods on objects.

I should note that the errors occur when running wp-browsers own test suite against Codeception 5 (Alpha). wp-browser extends the native Db class, but does never call __destruct() directly or set $dbh to null.

The following patch fixes that behavior:

diff --git a/src/Codeception/Lib/Driver/Db.php b/src/Codeception/Lib/Driver/Db.php
index b69017e..c83203c 100755
--- a/src/Codeception/Lib/Driver/Db.php
+++ b/src/Codeception/Lib/Driver/Db.php
@@ -91,7 +91,7 @@ class Db
 
     public function __destruct()
     {
-        if ($this->dbh->inTransaction()) {
+        if ($this->dbh && $this->dbh->inTransaction()) {
             $this->dbh->rollBack();
         }

Might be related: Codeception/Codeception#5072

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions