所以我目前正在使用laravel(v8)框架开发一个更大的web应用程序。显然我有一个开发环境和一个生产环境,很快甚至还有一个过渡环境。因为有必要测试我的类(模型、控制器等),我已经写了一些单元测试。在这样做的时候我遇到了一个问题:我真的不想在实际的数据库上运行我的测试(甚至不在开发环境上),原因有很多,主要有两个:
1.资料完整性
1.当我使用单独的内存数据库进行测试时,它们会运行得更快。
所以我的问题是我如何设置我的laravel应用程序,使它使用内存数据库(sqlite)运行单元测试,并使用常规的mysql数据库进行常规的应用程序操作?
3条答案
按热度按时间6za6bjd01#
您可以执行以下操作:
参考文件:https://www.phplab.info/categories/laravel/how-to-specify-a-separate-database-for-unit-testing-on-laravel-5
ma8fv8wu2#
您可以使用SQLite进行测试,只需在项目根目录下的phpunit.xml文件中添加以下行即可
这将使用database.php文件中的SQLite连接进行迁移和数据库操作,当您处理测试时。
正常的应用程序将使用MySQL数据库连接。
f0brbegy3#
这一点没有得到很好的记录,因为我越来越多地发现大量Laravel环境/基础架构的东西,这是特别困难的,因为缓存问题,缓慢的迁移时间和没有简单的方法来查看内存中的数据库是否实际上正在使用,这是一个困难和缓慢的过程来找出哪里出了问题。
经过一天的反复试验,我最终确认这套步骤是有效的。
1.复制
.env
文件的内容以创建名为.env.testing
的文件。将APP_ENV
的值更改为testing
,并删除所有DB_
条目。1.编辑
phpunit.xml
文件以添加或取消注解以下行:1.将以下数组添加到
database.php
中的connections
:1.最后,运行
php artisan config:clear
或php artisan optimize:clear
以清除配置缓存。您的单元和特性测试现在应该使用内存中的SQLite数据库,而您的本地应该继续使用
.env
文件中配置的数据库。