使用 phpunit 进行 Laravel 测试

Posted

技术标签:

【中文标题】使用 phpunit 进行 Laravel 测试【英文标题】:Laravel testing with phpunit 【发布时间】:2016-06-04 21:39:20 【问题描述】:

我如何确保当我在 Laravel 中使用 phpunit 进行测试时,例如我想测试我的 api 路由 /test/1 它使用我的测试数据库?

我已经建立了测试连接并更改了我的 phpunit.xml 文件。我将DB_CONNECTION 更改为我创建的测试连接。

<env name="DB_CONNECTION" value="mysql_testing"/>

但是当我发出发布请求时,我会从开发数据库中收到数据?

【问题讨论】:

您是否还在 config/database.php 中设置了配置值数组? 【参考方案1】:

在您的Config/database.php 文件中,mysql_testing 中的数据库的值是多少?应该是这样的:

'mysql_testing' => [ 
    'driver' => 'mysql',
    'host' => env('DB_HOST', 'localhost'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('TEST_DB_DATABASE', 'db_testing'),
    'username' => env('DB_USERNAME', 'root'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => false,
    'engine' => null,
],

并且数据库db_testing必须存在。

【讨论】:

不要使用html 来格式化使用代码块(只是意图代码有4个空格...)【参考方案2】:

在您的一个测试文件中,添加以下内容以输出您当前的DB_CONNECTION

dd(env('DB_CONNECTION'));

如果 PHPUnit.xml 设置正确,您应该在测试输出中获得 mysql_testing

【讨论】:

以上是关于使用 phpunit 进行 Laravel 测试的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHPUnit 对 Laravel 4 进行单元测试

使用 PHPUnit 在 Laravel 控制器中进行单元测试 Guzzle

Laravel 5 使用 phpUnit 进行测试而不重置我的数据库

在 Laravel 中设置 PHPUnit 测试

如何创建仅用于测试的 Laravel 路由(phpunit)?

phpunit 测试资源 laravel 5.5 返回集合而不是 json