解决 Laravel 单元测试报错:A facade root has not been set
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
Laravel 单元测试基类选择问题摘要
在使用 Laravel 进行单元测试时,如果直接复制默认的 tests/Unit/ExampleTest.php
文件进行测试,并在测试中使用 Facades,执行 phpunit
时可能会遇到错误提示:RuntimeException: A facade root has not been set。这是因为测试类错误地继承了 PHPUnit\Framework\TestCase
基类。
错误原因及解决办法
错误产生的原因是因为错误地继承了基类。在 Laravel 中,当测试类需要使用 Facades 时,应该继承 tests/TestCase.php
文件中的 Tests\TestCase
类,而不是 PHPUnit\Framework\TestCase
。
正确的基类继承应该如下所示:
namespace Tests;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
abstract class TestCase extends BaseTestCase {
use CreatesApplication;
}
正确的模板文件选择
要避免这种错误,应该复制 tests/Feature/ExampleTest.php
作为模板文件,这样就不会遇到类似的问题。
使用 Artisan 命令创建测试类
除了复制模板文件,还可以使用 Laravel 的 Artisan 命令来创建测试类。通过运行 php artisan make:test FooTest
命令可以直接在 tests/Feature
目录下创建测试文件。如果需要在 tests/Unit
目录中创建测试文件,则需要添加 --unit
参数,如 php artisan make:test BarTest --unit
。
想要了解更多内容?