[使用phpunit在Laravel中测试多个数据库

问题描述 投票:1回答:1

在我的应用程序中,我有使用Sqlite和种子进行测试以涵盖我的功能的测试。因此,我的phpunit env值设置为:

<env name="DB_DEFAULT" value="sqlite" />

但是,我也希望一小部分测试可以查看当前的数据库数据。因此,在1个测试文件中,连接到我的MySQL连接。

原因是我想检查我们的一个表中是否有所有记录的图像,因此测试需要访问最新数据,在这种情况下伪数据将无济于事。

我想我可以使用以下方法进行连接:

$pdo = DB::connection('mysql')->getPdo();

但是,仅当我在此处指定“ sqlite”时才连接测试,这是我的sqlite连接的名称。

我想做的测试不是基于模型的,所以我不想在模型文件中内置解决方案,如果可能的话,我只想在这1个测试文件中切换数据库。

我如何配置少量测试以使用其他数据库连接(现有的MySQL连接?

laravel testing phpunit database-connection
1个回答
1
投票

所以,我无法连接的原因是因为.env.testing文件中没有DB_值。然后,mysql连接使用的是Laravel配置默认值,因此连接没有出错。

。env.testing

DB_DEFAULT=mysql
DB_HOST=database
DB_NAME=my_database_name
DB_USER=root
DB_PASS=root

添加上面的几行使一切正常,现在我的测试文件可以访问当前的本地数据库。

public function __construct()
{
    $this->imgPath = dirname(__FILE__, 3) . '/public/images/';
}

public function testImages()
{
    $items = DB::connection('mysql')
        ->select(DB::raw('SELECT image_filename FROM items')
    );

    foreach ($items as $item) {
        $this->assertFileExists($this->imgPath . $item->image_filename . '.jpg');
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.