一部の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。
問題は--class引数の空白です。配列'--class' => 'TestDatabaseSeeder '
をよく見ると、最後にスペースがあります...これが問題です。それを'--class' => 'TestDatabaseSeeder'
に変更すると、問題なく動作するはずです。
DatabaseSeeder
はそれ自体でインスタンス化でき、そのcall
メソッドはパブリックです。
CourseTypesTest
クラスで行う必要があるのは
(new DatabaseSeeder())->call(TestDatabaseSeeder::class);
または、次のようにLaravelのapp
ヘルパーを使用できます
app(DatabaseSeeder::class)->call(TestDatabaseSeeder::class);
バージョン5.8以降、次のようなことができます。
// Run the DatabaseSeeder...
$this->seed();
// Run a single seeder...
$this->seed(OrderStatusesTableSeeder::class);