在运行 laravel phpunit testcase 时,我在 Model.php 第 1249 行收到错误“调用 null 上的成员函数 connection()”

Posted

技术标签:

【中文标题】在运行 laravel phpunit testcase 时,我在 Model.php 第 1249 行收到错误“调用 null 上的成员函数 connection()”【英文标题】:While running laravel phpunit testcase , i'm getting an error "Call to a member function connection() on null" in Model.php line 1249 【发布时间】:2019-09-17 18:29:23 【问题描述】:

我正在运行 laravel phpunit 测试用例,在数据库连接中出现错误。数据库连接成功。但是,

“在 null 上调用成员函数 connection()” - 无法打开 数据库连接服务器。请更新配置设置。

所有这些事情我都做得很好。查找以下详细信息:

"php" : ">=7.1.3",
"laravel/lumen-framework": "5.8.*",
"phpunit/phpunit" : "^7.0",
"phpunit/php-invoker" : "*",
"phpunit/dbunit" : "^4.0",

【问题讨论】:

您能否更新问题,提供更多有关错误的详细信息,例如碎石镜头 【参考方案1】:

如果没有看到您的 phpunit.xml 配置,这可能有点猜测,但我怀疑您需要指定一个连接进行测试。

如果您检查您的 php 单元文件,您的 php 属性中应该有一些值,如下所示。 将 DB_CONNECTION 设置为 sqlite 并将 DB_DATABASE 设置为 :memory: 是配置测试数据库的一种快速且轻量级的方式。

    <php>
        <server name="APP_ENV" value="testing"/>
        <server name="BCRYPT_ROUNDS" value="4"/>
        <env name="DB_CONNECTION" value="sqlite"/>
        <env name="DB_DATABASE" value=":memory:"/>
        <server name="CACHE_DRIVER" value="array"/>
        <server name="MAIL_DRIVER" value="array"/>
        <server name="QUEUE_CONNECTION" value="sync"/>
        <server name="SESSION_DRIVER" value="array"/>
    </php>

如果您的 phpunit.xml 文件中确实有类似的值,那么您将需要检查您的 config/database.php 文件并确保与您的 DB_CONNECTION 匹配的连接具有合理的配置。

sqlite 的默认值应该可以正常工作,如下所示:

    'sqlite' => [
        'driver' => 'sqlite',
        'database' => env('DB_DATABASE', database_path('database.sqlite')),
        'prefix' => '',
        'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
    ],

希望这会有所帮助。

【讨论】:

以上是关于在运行 laravel phpunit testcase 时,我在 Model.php 第 1249 行收到错误“调用 null 上的成员函数 connection()”的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 项目运行 phpunit 测试结果只显示点号

如何在Laravel项目中安装PHPunit

phpunit 没有在 laravel 中运行

PHPUnit 似乎没有运行 Laravel 迁移

laravel phpunit 如何确定运行哪个方法

在 Laravel 8 中运行多个 PHPUnit 测试时出错