扫码阅读
手机扫码阅读

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

45 2024-01-25

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

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

RuntimeException: A facade root has not been set.
/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:258 

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

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

namespace Tests; use Illuminate\Foundation\Testing\TestCase as BaseTestCase; abstract class TestCase extends BaseTestCase { use CreatesApplication;
} 

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

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

php artisan make:test FooTest 

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

php artisan make:test BarTest --unit 
原文链接: http://mp.weixin.qq.com/s?__biz=MzAwOTgzNjY4MA==&mid=2247484309&idx=2&sn=6ecd3618b89dd3376f644cdbe4650962&chksm=9b58c272ac2f4b64777e7b8997c327a39346b7ce8060ab8a8d09d474aae41802e21f6f2c7563#rd