Ich versuche, eine Modellfabrik zu verwenden, um Modelle in einem Datenanbieter zu erstellen. Es funktioniert, wenn ich die Fabrik im Setup-Verfahren oder im Test direkt verwenden, aber wenn ich versuche, es in einem Datenprovider zu verwenden, erhalte ich eine Fehlermeldung:Verwendung von Factory in PHPUnit-Provider schlägt fehl
1) Warning
The data provider specified for MyClassTest::testSomeMethod is invalid.
Unable to locate factory with name [default] [App\Model\User].
Die Fabrik Definition:
/** @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,
];
});
Mein Aufruf an die Fabrik:
factory(\App\Model\User::class)->states('guest')->make();
ist es ein Fehler von Laravel oder bin ich etwas fehlt hier?
Edit:
Nach einigen Debuggen ich das Werk gefunden Definitionen sind nicht vor dem Datenanbieter Aufruf geladen, sie genannt, wo (dh definiert), wenn die setUp() -Methode aufgerufen wurde - die nach Daten geschieht Provider Call -, so kann es die Fabrik im Datenprovider nicht finden.
So scheint es mir, dass es unmöglich ist, Fabriken in Datenprovider (oder jede statische Methode in der Testklasse) zu verwenden. Oder ich würde etwas tun, um die Fabriken in meiner Datenanbietermethode zu definieren!
BTW, Es gibt eine unbeantwortete Fragen wie dies in Laracasts [https://laracasts.com/discuss/channels/testing/using-factory-in-phupunit-provider-fails) und [dies] (https://laracasts.com/discuss/channels/testing/unable-to-locate-factory-namedafault-in-laravel-dataprovider) – Aite