モデルプロバイダを使用してデータプロバイダでモデルを作成しようとしています。私が直接設定方法やテストに工場を使用する場合、それは動作しますが、私は、データプロバイダでそれを使用しようとする場合、私はエラーを取得する:PHPUnitプロバイダでのファクトリの使用に失敗しました
1) Warning
The data provider specified for MyClassTest::testSomeMethod is invalid.
Unable to locate factory with name [default] [App\Model\User].
ファクトリの定義:
/** @var \Illuminate\Database\Eloquent\Factory $factory */
$factory->define(\App\Model\User::class, function (Faker\Generator $faker) {
static $password;
return [
'id' => $faker->unique()->numberBetween(1, 10000),
'email_address' => $faker->unique()->safeEmail,
'remember_token' => str_random(10),
'password' => $password ?: $password = bcrypt('secret'),
];
});
$factory->state(\App\Model\User::class, 'guest', function ($faker) {
return [
'role_id' => 9999,
];
});
工場への私の呼び出し:
factory(\App\Model\User::class)->states('guest')->make();
は、それはLaravelからのバグであるか、私はここで何かが足りないのですか?
編集:
いくつかのデバッグした後、私はそのファクトリの定義は、データプロバイダーの呼び出しの前にロードされていない、彼らはセットアップ()メソッドが呼び出されたとき(つまり、定義された)と呼ばれる場所を見つけ - データの後にたまたまプロバイダ呼び出し - 、データプロバイダでファクトリを見つけることができません。
したがって、データプロバイダ(またはテストクラス内の静的メソッド)でファクトリを使用することは不可能です。 データプロバイダメソッドでファクトリを定義するために何かすべきことがあります。
ところで、このような未解決の質問は、[this](https://laracasts.com/discuss/channels/testing/using-factory-in-phpunit-provider-fails)や[this]( https://laracasts.com/discuss/channels/testing/unable-to-locate-factory-namedafault-in-laravel-dataprovider) – Aite