前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决 Laravel 单元测试报错:A facade root has not been set

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

作者头像
沈唁
发布2022-03-03 09:50:55
1.5K0
发布2022-03-03 09:50:55
举报
文章被收录于专栏:沈唁志沈唁志

在使用 Laravel 写单元测试时,直接复制了默认的文件:tests/Unit/ExampleTest.php

而在测试对象中使用到了 Facades 相关的语法,执行phpunit时报错:

代码语言:javascript
复制
RuntimeException: A facade root has not been set.

/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:258

此问题的原因是继承了错误的基类,默认文件tests/Unit/ExampleTest.php中:

代码语言:javascript
复制
namespace Tests\Unit;

use PHPUnit\Framework\TestCase;

class ExampleTest extends TestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testBasicTest()
    {
        $this->assertTrue(true);
    }
}

继承的是PHPUnit\Framework\TestCase,而我们应该继承tests/TestCase.php中的Tests\TestCase

代码语言:javascript
复制
namespace Tests;

use Illuminate\Foundation\Testing\TestCase as BaseTestCase;

abstract class TestCase extends BaseTestCase
{
    use CreatesApplication;
}

实际上应该复制 tests/Feature/ExampleTest.php 作为模板文件,就不会遇到这个问题了。

除了复制之外,也可以直接在命令行中直接运行:

代码语言:javascript
复制
php artisan make:test FooTest

将会为你创建tests/Feature/FooTest.php文件,而加上--unit参数,则是在tests/Unit中创建文件。

代码语言:javascript
复制
php artisan make:test BarTest --unit
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 沈唁志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档