我正在嘗試使用模型工廠在數據提供程序中創建模型。它的工作原理,如果我的設置方法或直接在測試中使用的工廠,但如果我嘗試在數據提供程序使用它我得到一個錯誤:在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的錯誤還是我失去了一些東西?
編輯:
一些調試後,我發現,工廠的定義不是數據提供商的呼叫之前加載,在那裏他們被稱爲(即定義)當安裝()方法被調用 - 數據之後發生提供者調用 - ,因此它無法在數據提供者中找到工廠。
因此,在我看來,在數據提供者(或測試類中的任何靜態方法)中使用工廠是不可能的。 或者我會做些什麼來定義我的數據提供者方法中的工廠!
順便說一句,在laracasts中有這樣一個沒有答案的問題,[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