我正试图在另一个包裹的叉子上开发一个实用程序,用于处理Laravel应用程序的数据库模式。
在我的开发中,我想使用测试,因为上一次没有测试。虽然这个包在应用程序中与Laravel6.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发布于 2019-09-08 15:29:01
一种简单的遗忘。要在Laravel之外测试Laravel包,有必要扩展管弦乐团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);
}
}https://stackoverflow.com/questions/57842516
复制相似问题