如何从PHPUnit Test setUp运行Laravel数据库播种机?

gan*_*404 13 phpunit laravel laravel-5 laravel-seeding

我试图在一些PHPUnit测试用例中的每次测试之前重新创建数据库.我正在使用Laravel 5.3.这是TestCase:

class CourseTypesTest extends TestCase
{
    public function setUp()
    {
        parent::setUp();
        Artisan::call('migrate');
        Artisan::call('db:seed', ['--class' => 'TestDatabaseSeeder ', '--database' => 'testing']);
    }

    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function test_list_course_types()
    {
        $httpRequest = $this->json('GET', '/api/course-types');
        $httpRequest->assertResponseOk();
        $httpRequest->seeJson();

    }

    public function tearDown()
    {
        Artisan::call('migrate:reset');
        parent::tearDown();
    }
}
Run Code Online (Sandbox Code Playgroud)

运行phpunit失败并显示错误:

由Sebastian Bergmann和贡献者提供的$ phpunit PHPUnit 5.7.5.

E 1/1(100%)

时间:2.19秒,内存:12.00MB

有1个错误:

1)CourseTypesTest :: test_list_course_types ReflectionException:类TestDatabaseSeeder不存在

D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Container\Container.php:749 D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Container\Container.php:644 D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Foundation\Application.php:709 D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Database\Console\Seeds\SeedCommand.php:74 D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Database\Console\Seeds\SeedCommand.php:63 D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php :2292 D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Database\Console\Seeds\SeedCommand.php:64 D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Container\Container.php:508 D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Console\Command.php:169 D:\ www\learn-laravel\my-folder-api\vendor\symfony\console\Command\Command.php:254 D:\ www\learn-laravel\my -folder-api\vendor\laravel\framework\src\Illuminate\Console\Command.php:155 D:\ www\learn-laravel\my-folder-api\vendor\symfony\console\Application.php:821 D:\www\learn-laravel\my-folder-api\vendor\symfony\console\Application.php:187 D:\ www\learn-laravel\my-folder-api\vendor\symfony\console\Application.php:118 D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Console\Application.php:107 D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Foundation\Console\Kernel.php:218 D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php:237 D:\ www\learn-laravel\my-folder-api\tests\rest\CourseTypesTest.php:17

错误!测试:1,断言:0,错误:1.

但是这个类存在:
数据库/种子内的TestDatabaseSeeder

San*_*bat 21

从 5.8 版开始,您可以执行以下操作:

// Run the DatabaseSeeder...
$this->seed();

// Run a single seeder...
$this->seed(OrderStatusesTableSeeder::class);
Run Code Online (Sandbox Code Playgroud)

看一下文档


小智 14

DatabaseSeeder可自行实例化,其call方法是公共的.

CourseTypesTest课堂上你需要做的就是

(new DatabaseSeeder())->call(TestDatabaseSeeder::class);
Run Code Online (Sandbox Code Playgroud)

或者您可以使用Laravel的app助手,如下所示

app(DatabaseSeeder::class)->call(TestDatabaseSeeder::class);
Run Code Online (Sandbox Code Playgroud)


小智 10

问题是--class参数中的空格.如果仔细看看数组,最后'--class' => 'TestDatabaseSeeder '会有空间......这就是问题所在.改变它'--class' => 'TestDatabaseSeeder',它应该工作正常.