1

我的 laravel 7 应用程序的 mysql 中有一个包含几个数据库表的数据库。现在我正在尝试进行单元测试,但问题是,有没有办法让 mysql 中的那些数据库表反映在我更喜欢在 phpunit 中使用的 sqlite db 中?。怎么做?..

在根目录中我创建了一个文件并将其命名为 .env.testing 然后我将其配置修改为这个

DB_CONNECTION=sqlite
DB_DATABASE="C:/wamp64/www/myapplication/test.sqlite"

当我在 laravel 7 中运行 phpunit 现有示例测试文件/套件时,什么也没发生,test.sqlite 没有表。我错过了什么?

4

1 回答 1

0

通常,您在运行测试之前准备好您的数据库进行测试。

如果您在本地使用 MySql,并且想在本地运行测试但使用 sqlite,只需更改 phpunit.xml 中的数据库环境变量以用于您的 sqlite 数据库,例如:。

<php>
    ...
    <server name="DB_CONNECTION" value="sqlite"/>
    <server name="DB_HOST" value="..."/>
    <server name="DB_PORT" value="..."/>
    <server name="DB_DATABASE" value="..."/>
    <server name="DB_USERNAME" value="..."/>
    <server name="DB_PASSWORD" value="..."/>
    ...
</php>

现在要在运行测试之前加载数据库,您可以相应地更新 .env 文件中的 env 变量并运行php artisan migrate:fresh --seed,您的测试数据库将被播种。您可以切换回以前的值,直到您对要反映在测试数据库中的种子进行更新。

如果你使用的是 Laravel,那么你很可能会使用 RefreshDatabasetrait,这样在每次测试之后,数据库都会处于与开始时相同的状态。

如果您不想采用这样的手动方法,那么您可以使用phing 之类的东西来自动化这个过程,我曾经在一些项目中取得了巨大的成功。

于 2020-07-17T13:41:10.713 回答