web-dev-qa-db-ja.com

実行方法Laravel PHPUnit Testセットアップからのデータベースシーダー?

一部の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();
    }
}

phpunitの実行は次のエラーで失敗します:

$ phpunit Sebastian Bergmannおよび寄稿者による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-fol der-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 inside database/seeds

15
gandra404

問題は--class引数の空白です。配列'--class' => 'TestDatabaseSeeder 'をよく見ると、最後にスペースがあります...これが問題です。それを'--class' => 'TestDatabaseSeeder'に変更すると、問題なく動作するはずです。

11
Bostjan

DatabaseSeederはそれ自体でインスタンス化でき、そのcallメソッドはパブリックです。

CourseTypesTestクラスで行う必要があるのは

(new DatabaseSeeder())->call(TestDatabaseSeeder::class);

または、次のようにLaravelのappヘルパーを使用できます

app(DatabaseSeeder::class)->call(TestDatabaseSeeder::class);
13

バージョン5.8以降、次のようなことができます。

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

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

ドキュメントをご覧ください

5
Santi Barbat