我试图在一些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:Class TestDatabaseSeeder不存在
d:\ WWW \学习-laravel \我的文件夹-API \厂商\ laravel \框架\ SRC \照亮\容器\ Container.php:749 d:\ WWW \学习,laravel \我的文件夹-API \供应商\ laravel \框架的\ src \照亮\集装箱\ Container.php:644 d:\ WWW \学习,laravel \我的文件夹-API \供应商\ laravel \框架的\ src \照亮\基金会\ Application.php:709 d:\ WWW \学习,laravel \我的文件夹-API \供应商\ laravel \框架的\ src \照亮\数据库\控制台\种子\ SeedCommand.php:74 d:\ WWW \学习,laravel \我的文件夹-API \供应商\ laravel \框架的\ src \照亮\数据库\控制台\种子\ SeedCommand.php:63 d:\ WWW \学习,laravel \我的文件夹-API \供应商\ laravel \框架的\ src \照亮\数据库\雄辩\ Model.php:2292 d:\ WWW \学习,laravel \我的文件夹-API \供应商\ laravel \框架的\ src \照亮\数据库\控制台\种子\ SeedCommand.php:64 d:\ WWW \学习,laravel \我的文件夹-API \供应商\ laravel \框架的\ src \照亮\集装箱\ Container.php:508 d:\ WWW \学习,laravel \我的文件夹-API \供应商\ laravel \框架的\ src \照亮\控制台\ Command.php:169 d:\ WWW \学习,laravel \我的文件夹-API \供应商\ symfony的\控制台\ COMMAND \ Command.php:254 d:\ WWW \学习,laravel \我的文件夹-API \供应商\ laravel \框架的\ src \照亮\控制台\ Command.php:155 d:\ WWW \学习,laravel \我的文件夹-API \供应商\ symfony的\控制台\ Application.php:821 d:\ WWW \学习,laravel \我的文件夹-API \供应商\ symfony的\控制台\ Application.php:187 d:\ WWW \学习,laravel \我的文件夹-API \供应商\ symfony的\控制台\ Application.php:118 d:\ WWW \学习,laravel \我的文件夹-API \供应商\ laravel \框架的\ src \照亮\控制台\ Application.php:107 d:\ WWW \学习,laravel \我的文件夹-API \供应商\ laravel \框架的\ src \照亮\基金会\控制台\ Kernel.php:218 d:\ WWW \学习,laravel \我的文件夹-API \供应商\ laravel \框架的\ src \照亮的\ Support \外墙\ Facade.php:237 d:\ WWW \学习-laravel \我的文件夹-API \测试\其余\ CourseTypesTest.php:17
错误!测试:1,断言:0,错误:1。
答案 0 :(得分:10)
问题是--class参数中的空格。如果仔细查看数组'--class' => 'TestDatabaseSeeder '
,最后会有空间......这就是问题所在。将其更改为'--class' => 'TestDatabaseSeeder'
,它应该可以正常工作。
答案 1 :(得分:10)
DatabaseSeeder
可以单独实例化,其call
方法是公共的。
您需要在CourseTypesTest
类中做的所有事情
(new DatabaseSeeder())->call(TestDatabaseSeeder::class);
或者您可以按照以下方式使用Laravel的app
帮助程序
app(DatabaseSeeder::class)->call(TestDatabaseSeeder::class);
答案 2 :(得分:3)
从5.8版开始,您可以执行以下操作:
// Run the DatabaseSeeder...
$this->seed();
// Run a single seeder...
$this->seed(OrderStatusesTableSeeder::class);