在使用 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 TestsUnit;
use PHPUnitFrameworkTestCase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$this->assertTrue(true);
}
}
继承的是PHPUnitFrameworkTestCase
,而我们应该继承tests/TestCase.php
中的TestsTestCase
。
namespace Tests;
use IlluminateFoundationTestingTestCase 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
中创建文件。
php artisan make:test BarTest --unit