如何从PHPUnit测试设置运行Laravel数据库播种器?
在一些PHPUnit测试用例中,我试图在每次测试之前重新创建数据库。我使用的是Laravel 5.3。下面是测试用例:如何从PHPUnit测试设置运行Laravel数据库播种器?,laravel,laravel-5,phpunit,laravel-seeding,Laravel,Laravel 5,Phpunit,Laravel Seeding,在一些PHPUnit测试用例中,我试图在每次测试之前重新创建数据库。我使用的是Laravel 5.3。下面是测试用例: class CourseTypesTest扩展了TestCase { 公共功能设置() { 父::设置(); Artisan::调用('migrate'); Artisan::call('db:seed',['-class'=>TestDatabaseSeeder','-database'=>testing']); } /** *一个基本的功能测试示例。 * *@返回无效 */
class CourseTypesTest扩展了TestCase
{
公共功能设置()
{
父::设置();
Artisan::调用('migrate');
Artisan::call('db:seed',['-class'=>TestDatabaseSeeder','-database'=>testing']);
}
/**
*一个基本的功能测试示例。
*
*@返回无效
*/
公共功能测试\列表\课程\类型()
{
$httpRequest=$this->json('GET','/api/course-types');
$httpRequest->assertResponseOk();
$httpRequest->seeJson();
}
公共函数拆卸()
{
Artisan::调用('migrate:reset');
父::拆卸();
}
}
运行phpunit
失败,出现错误:
$phpunit phpunit 5.7.5由塞巴斯蒂安·伯格曼和贡献者撰写
e1/
1(100%)
时间:2.19秒,内存:12.00MB
有1个错误:
1) CourseTypesTest::测试\列表\课程\类型反射异常:类
TestDatabaseSeeder不存在
D:\www\learn laravel\my folder api\vendor\laravel\framework\src\illumb\Container\Container.php:749
D:\www\learn laravel\my folder api\vendor\laravel\framework\src\light\Container\Container.php:644
D:\www\learn laravel\my folder api\vendor\laravel\framework\src\illumb\Foundation\Application.php:709
D:\www\learn laravel\my folder api\vendor\laravel\framework\src\light\Database\Console\Seeds\SeedCommand.php:74
D:\www\learn laravel\my folder api\vendor\laravel\framework\src\light\Database\Console\Seeds\SeedCommand.php:63
D:\www\learn laravel\my folder api\vendor\laravel\framework\src\illumb\Database\Eloquent\Model.php:2292
D:\www\learn laravel\my folder api\vendor\laravel\framework\src\light\Database\Console\Seeds\SeedCommand.php:64
D:\www\learn laravel\my folder api\vendor\laravel\framework\src\illumb\Container\Container.php:508
D:\www\learn laravel\my folder api\vendor\laravel\framework\src\illumb\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\illumb\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\illumb\Console\Application.php:107
D:\www\learn laravel\my folder api\vendor\laravel\framework\src\illumb\Foundation\Console\Kernel.php:218
D:\www\learn laravel\my folder api\vendor\laravel\framework\src\illumb\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
,并且它的调用方法是公共的
在CourseTypesTest
课程中,你需要做的就是
(new DatabaseSeeder())->call(TestDatabaseSeeder::class);
或者您可以使用Laravel的应用程序
助手,如下所示
app(DatabaseSeeder::class)->call(TestDatabaseSeeder::class);
从5.8版开始,您可以执行以下操作:
// Run the DatabaseSeeder...
$this->seed();
// Run a single seeder...
$this->seed(OrderStatusesTableSeeder::class);
恭喜!空位。。太好了:)如果您只想迁移一次数据,请选中此项