扫码阅读
手机扫码阅读

解决 Laravel 单元测试报错:A facade root has not been set

356 2024-01-25

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:解决 Laravel 单元测试报错:A facade root has not been set
文章来源:
鲁飞
扫码关注公众号
Laravel 单元测试基类选择问题摘要

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

分享这篇文章,让更多朋友避免在 Laravel 单元测试中遇到基类选择的问题。

想要了解更多内容?

查看原文:解决 Laravel 单元测试报错:A facade root has not been set
文章来源:
鲁飞
扫码关注公众号