2016-10-17 11 views
5

私は文書化さhereLaravel 5.3コール雄弁ファクトリー::状態()

$factory->define(App\User::class, function(\Faker\Generator $faker) { 
    return [ 
     'name' => $faker->name, 
     'email' => $faker->unique()->safeEmail, 
     'remember_token' => str_random(10), 
     'phone' => $faker->phoneNumber, 
    ]; 
}); 

$factory->state(App\User::class, 'admin', function (Faker\Generator $faker) { 
    return [ 
     'groups' => function(App\User $u) { 
      return App\Models\Group::where('level', '<=', 5)->get()->toArray(); 
     } 
    ]; 
}); 
としてLaravels ModelFactoryを使用して、テスト用のUserモデルのいくつかの異なるバリエーションを定義しようとしています

そして、私はUserモデルを作成:

$user = factory(User::class)->states('admin')->make(); 

しかし、PHPUnitは文句なしにテストの外に出るようです。 PHPのログでは、私は、以下を参照してください。

Call to undefined method Illuminate\Database\Eloquent\Factory::state() 

あり状態()メソッドに非常に多くのドキュメントはLaravelのドキュメントにはない、と私はそれを示すために進展なしとの時間を検索し、実験してきました。

傍注として、groups属性はMany関係を参照しています。しかし、この例外は、私が作成しているモデル、単純なモデルであってもスローされます。

+4

Illuminate \ Database \ Eloquent \ FactoryとFactoryBuilderのクラスを掘り下げた後、最新のLaravelブランチのgithubに比べて、state()メソッドとstates()メソッドが両方とも不足していることがわかりました。 'composer update'を実行した後、Laravel Framework v5.3.18に更新されました。そして、ModelFactoryの状態は期待通りに機能します。 –

+1

ご協力いただきありがとうございます。あなた自身の質問に答えることをお勧めします。 – whoan

答えて

2

Illuminate \ Database \ Eloquent \ FactoryとFactoryBuilderのクラスを掘り下げた後、state()メソッドとstates()メソッドが両方とも欠落していたことがわかりました。作曲家のアップデートを実行した後、私はLaravel Framework v5.3.18にアップデートしました。そして、ModelFactoryの状態は期待通りに機能します。