我想种子数据库 当我使用这个
public function run()
{
$users = factory(app\User::class, 3)->create();
}
在数据库中添加三个用户,但是当我使用此
时 public function run()
{
$Comment= factory(app\Comment::class, 3)->create();
}
显示错误
[InvalidArgumentException]
无法找到名称为[默认] [app \ Comment]的工厂。
答案 0 :(得分:86)
use PHPUnit\Framework\TestCase;
[错误:并抛出此错误]
use Tests\TestCase;
[正确]
答案 1 :(得分:32)
默认情况下,laravel安装在database/factories/ModelFactory.php
文件中附带此代码。
$factory->define(App\User::class, function (Faker\Generator $faker) {
return [
'name' => $faker->name,
'email' => $faker->email,
'password' => bcrypt(str_random(10)),
'remember_token' => str_random(10),
];
});
因此,在使用工厂模型对种子数据库进行种子设定之前,需要先定义它。 这只是使用Faker Library的实例,该实例用于生成假数据,用于播种数据库以执行测试。
确保您为评论模型添加了类似的模态工厂。
所以你的评论模型工厂将是这样的:
$factory->define(App\Comment::class, function (Faker\Generator $faker) {
return [
'comment' => $faker->sentence,
// Any other Fields in your Comments Model
];
});
答案 2 :(得分:14)
当您从factory()->create()
运行命令php artisan tinker
时,也会发生这种情况。确保在打开修补程序之前保存文件database/factories/ModelFactory.php
答案 3 :(得分:10)
如果 PHPUnit 没有帮助。
对于那些在测试中遇到相同问题的读者,我发现我忘记在parent::setUp()
方法中添加setUp
。
答案 4 :(得分:7)
use App\Comment
...
$factory->define(Comment::class, function (Faker $faker){
2º步 - 验证CommentsTableSeeder中的名称是否正确。
use App\Comment
...
public function run()
{
factory(Comment::class, 3)->create();
}
祝你好运!
答案 5 :(得分:7)
如果在使用单元测试时遇到此问题,则可以解决您的问题。 使用
扩展您的课程
Tests\TestCase
代替
PHPUnit\Framework\TestCase
答案 6 :(得分:6)
我正在使用 laravel 5.5 ,为此,这有点不同。您必须在 \ database \ factories 目录中创建 CommentFactory.php 并将其添加到内部,
$factory->define(App\Comment::class, function (Faker\Generator $faker) {
return [
'comment' => $faker->sentence,
// Any other Fields in your Comments Model
];
});
并添加此内容,
$Comment= factory(\App\Comment::class, 3)->create();
而不是
$Comment= factory(app\Comment::class, 3)->create();
我只是想添加这个,因为我在以后的版本面临同样的问题,这个线程帮助我解决了很多问题。
答案 7 :(得分:2)
以上所有答案均对我没有帮助。 完全解决此错误的最佳方法是通过在TestCase类中注册工厂,如下所示:
<?php
namespace Vendo\Package\Tests;
use Vendor\Package\InboxServiceProvider;
use Illuminate\Database\Eloquent\Factory as EloquentFactory;
class TestCase extends \Orchestra\Testbench\TestCase
{
public function setUp(): void
{
parent::setUp();
// additional setup
$this->app->make(EloquentFactory::class)->load(__DIR__ . '/../database/factories');
}
答案 8 :(得分:1)
我正在使用Laravel Framework 5.7.19
。就我而言,我的工厂文件是从命令行make:factory
生成的。文件中的默认模型为:
$factory->define(Model::class, ...
您应该将名称Model
更改为您确实要使用的名称,在我的情况下为\App\InterviewQuestion
,因此它变为:
$factory->define(\App\InterviewQuestion::class, ...
答案 9 :(得分:1)
这可能是缓存问题。您可以通过执行以下命令来解决该问题。
php artisan clear-compiled
composer dump-autoload
php artisan optimize
答案 10 :(得分:0)
我正尝试从修补匠测试Model Factory。我已经按照上述线程和其他Laravel文档中的说明创建了模型工厂。但是它不会运行并向消息中抛出InvalidArgumentException
无法找到名称为[default] [/ App / Game]的工厂
我在Tinker命令行中将其运行为:
factory('\App\Game')->create();
一段时间后,我发现问题出在反斜杠\
前面。我像下面那样运行它,效果很好。
factory('App\Game')->create();
傻事,但可能会帮助别人。
答案 11 :(得分:0)
在我的情况下,错误是我导入了错误的测试基类。我没有扩展Laravel的Tests \ TestCase,而是从PHPUnit导入了TestCase类。傻了,但花了我不少时间才能解决。
答案 12 :(得分:0)
没有一个答案对我有用 所以我删除了我的工厂并重新创建了(每一个都与以前的工厂相同),这个问题为我解决了
答案 13 :(得分:0)
我有同样的问题。尝试了一切。没事。然后我退出了Tinker,然后再次启动它,就可以了!