扫码阅读
手机扫码阅读

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

196 2024-01-25
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 单元测试中遇到基类选择的问题。

想要了解更多,点击 查看原文

鲁飞(沈唁)的个人公众号,不定时分享和PHP相关的技术资源、开源项目、技术总结等内容。

32 篇文章
浏览 8983
加入社区微信群
与行业大咖零距离交流学习
软件研发质量管理体系建设 白皮书上线