【问题标题】:Is Laravel 8 Testing with a database broken out of the box是否使用开箱即用的数据库进行 Laravel 8 测试
【发布时间】:2022-03-11 06:25:41
【问题描述】:

我有一个新的 Laravel 8 安装,在 docker 上运行。一切似乎都运行良好,但使用任何配置的测试似乎都被破坏了。例如,将用户拉出数据库的简单测试失败。

我使用的是默认的phpunit.xml,并且我添加了一个.env.testing,它只是.env的一个副本

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

为单元 ExampleTest.php 添加了一个快速测试

/**
 * A basic test example.
 *
 * @return void
 */
public function testBasicTest()
{
    $user = User::find(1);
    $this->assertInstanceOf(User::class, $user);
}

运行 sail php artisan 测试 测试:1 次失败,16 次通过 时间:2.70s

• Tests\Unit\ExampleTest > basic test
   Error 

  Call to a member function connection() on null

  at vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1493
    1489▕      * @return \Illuminate\Database\Connection
    1490▕      */
    1491▕     public static function resolveConnection($connection = null)
    1492▕     {
  ➜ 1493▕         return static::$resolver->connection($connection);
    1494▕     }
    1495▕ 
    1496▕     /**
    1497▕      * Get the connection resolver instance.

我有许多 laravel 应用程序在以前的 Laravel 版本中运行这些完全相同的测试。我错过了什么?

谢谢,

【问题讨论】:

标签: php mysql laravel testing phpunit


【解决方案1】:

您确定您使用的是新的phpunit.xml.env

我发现backupGlobals="false" backupStaticAttributes="false" 正在杀死$_ENV$_SERVER 的一些变量,并且一个讨厌的组件正在从那里读取变量。

我所做的是在测试中将.envphpunit.xml 暴露给phpunit 并测试其值。发现您无法使用env('key') 读取/.env 处的数据(phpunit 环境变量与您在.envphpunit.xml 中配置的不同),这仅适用于测试的应用程序.

在一个新项目上安装新版本的 Laravel 8 并将我的树与新的树进行比较表明我还缺少一些 .env 定义,并且 phpunit.xml 文件过大。

【讨论】:

    猜你喜欢
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多