在使用Laravel 7创建单元测试时,如何使sql数据库表反映在sqlite db中?

在使用Laravel 7创建单元测试时,如何使sql数据库表反映在sqlite db中?,laravel,phpunit,laravel-7,laravel-7.x,Laravel,Phpunit,Laravel 7,Laravel 7.x,我有一个数据库,在我的Laravel7应用程序的mysql中有几个数据库表。 现在我正在尝试进行单元测试,但问题是,有没有办法让mysql中的那些数据库表反映在我更喜欢在phpunit中使用的sqlite db中。怎么做 在根目录中,我创建了一个文件,并将其命名为.env.testing 然后我将其配置修改为 DB_CONNECTION=sqlite DB_DATABASE="C:/wamp64/www/myapplication/test.sqlite" 当我在larav

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

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

DB_CONNECTION=sqlite
DB_DATABASE="C:/wamp64/www/myapplication/test.sqlite"
当我在laravel 7中运行phpunit现有样本测试文件/套件时,
什么也没发生,test.sqlite没有表。我遗漏了什么?

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

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

<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,那么您可能会使用
RefreshDatabase
trait,以便每次测试后,数据库将处于与启动时相同的状态


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

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

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

<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,那么您可能会使用
RefreshDatabase
trait,以便每次测试后,数据库将处于与启动时相同的状态


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

您如何在mysql数据库中填充数据?如果您使用的是seeder和migrations,那么在运行测试之前,只需
php artisan migrate:fresh--seed
您的单元测试数据库。您的意思是我只需要通过--seed参数?我是否需要将sqlite文件路径放在laravel中php单元的xml配置文件中?您如何在mysql数据库中填充数据?如果您使用的是seeder和migrations,那么在运行测试之前,只需
php artisan migrate:fresh--seed
您的单元测试数据库。您的意思是我只需要通过--seed参数?我是否需要将sqlite文件路径放在laravel中php单元的xml配置文件中?在db_数据库中,我是否应该将“C:/wamp64/www/myApp/test.sqlite”…或“:memory”?@sasori DB_DATABASE是数据库的名称,即DB_数据库中的“laravel”值,我应该输入例如“C:/wamp64/www/myApp/test.sqlite”…或“:memory”?@sasori DB_DATABASE是数据库的名称,即“laravel”