在 laravel 8 中设置单元测试环境
Posted
技术标签:
【中文标题】在 laravel 8 中设置单元测试环境【英文标题】:Setting up a unit testing environment in laravel 8 【发布时间】:2021-05-12 09:19:39 【问题描述】:所以我目前正在使用 laravel (v8) 框架开发一个更大的网络应用程序。显然我有一个开发环境和一个生产环境,很快甚至还有一个暂存环境。由于需要测试我的类(模型、控制器等),我已经编写了一些单元测试。这样做时我遇到了一个问题:出于各种原因,我真的不想在实际数据库(甚至在 dev env 上)上运行我的测试,主要是两个:
-
数据完整性
当我使用单独的内存数据库进行测试时,它们会运行得更快。
所以我的问题是如何设置我的 laravel 应用程序,使其使用内存数据库 (sqlite) 运行单元测试并使用常规 mysql 数据库进行常规应用程序操作?
【问题讨论】:
【参考方案1】:你可以这样做:
class TestCase extends Illuminate\Foundation\Testing\TestCase
public function createApplication()
$app = require __DIR__.'/../bootstrap/app.php';
//Load .env.testing environment
$app->loadEnvironmentFrom('.env.testing');
$app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();
return $app;
参考文档:https://www.phplab.info/categories/laravel/how-to-specify-a-separate-database-for-unit-testing-on-laravel-5
【讨论】:
【参考方案2】:您可以使用 SQLite 进行测试。只需在项目根目录中的 phpunit.xml 文件中添加以下行
<PHP>
...
<server name="DB_CONNECTION" value="sqlite"/>
<server name="DB_DATABASE" value=":memory:"/>
...
</php>
这将在您处理测试时使用您的 database.php 文件中的 SQLite 连接进行迁移和数据库操作。
普通应用程序将使用您的 MySQL 数据库连接进行调整。
【讨论】:
出于某种原因,这对我不起作用。除了这个,你还需要设置 ENV_APP 或其他东西吗?以上是关于在 laravel 8 中设置单元测试环境的主要内容,如果未能解决你的问题,请参考以下文章
在 WAMP 环境中设置 Concerto 自适应测试平台时出错
为啥在测试类中设置的 spring.profiles.active 在实际测试类的环境属性中不可用?