【问题标题】:RuntimeException: A facade root has not been setRuntimeException:尚未设置外观根
【发布时间】:2020-01-10 13:00:39
【问题描述】:

我正在尝试在 fork of another package 上开发一个实用程序来处理 Laravel 应用程序的数据库架构。

在我的开发中,我想使用测试,因为前一个什么都没有。尽管当我尝试测试该包时,该包完美地集成在带有 Laravel 6.X 的应用程序中,但它失败了

<?php

namespace Abkrim\DbSchema\Tests;

use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\DB;
use PHPUnit\Framework\TestCase;
use Faker\Factory as Faker;

class DbSchemaTest extends TestCase
{
    /** @test */
    function it_can_access_the_database()
    {
       $faker = Faker::create();

       $user = DB::table('users')->insert([
           'email' => $faker->unique()->email,
           'name' => $faker->unique()->name,
           'password' => $faker->password(10),
           'rememberToken' => $faker->md5
       ]);
    }
}

如果尝试运行测试

vendor/bin/phpunit --filter DbSchemaTest

1) Abkrim\DbSchema\Tests\DbSchemaTest::it_can_access_the_database
RuntimeException: A facade root has not been set.

/home/abkrim/Sites/db-schema/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:236
/home/abkrim/Sites/db-schema/tests/DbSchemaTest.php:17

【问题讨论】:

  • 请尝试:$user = \DB::table('users')
  • 嗨。用$user = \DB::table('users')-&gt;insert([ 得到Error: Class 'DB' not found

标签: php testing laravel-5 phpunit


【解决方案1】:

一个简单的健忘。要在 Laravel 之外测试 Laravel 包,需要扩展 Orchestra TestCase 而不是 PHPUnit

正确的代码是

<?php

namespace Abkrim\DbSchema\Tests;

use Abkrim\DbSchema\DbSchema;
use Abkrim\DbSchema\DbSchemaServiceProvider;
use Abkrim\DbSchema\DbSchemaFacade;
use Faker\Factory as Faker;
use Illuminate\Support\Facades\DB;
use Orchestra\Testbench\TestCase;

class DbSchemaTest extends TestCase
{
    protected function getPackageProviders($app)
    {
        return [
            DbSchemaServiceProvider::class
        ];
    }

    protected function getPackageAliases($app)
    {
        return [
            'DbSchema' => DbSchema::class
        ];
    }

    protected function getEnvironmentSetUp($app)
    {
        include_once __DIR__ . '/../database/migrations/create_users_table.php.stub';

        (new \CreateUsersTable)->up();
    }

    /** @test */
    function it_can_access_the_database()
    {
        $faker = Faker::create();
        $mail = 'fake@mail.tld';

        DB::table('users')->insert([
           'email' => $mail,
           'name' => $faker->unique()->name,
           'password' => $faker->password(10),
           'remember_token' => $faker->md5
        ]);

        $user = DB::table('users')->first();

        $this->assertSame($user->email, $mail);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 2020-05-18
    • 2020-08-22
    • 2019-11-05
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多