[Laravel] Test (PHPUnit) 実行時に InvalidArgumentException: Unable to locate factory with name [default] のエラーが出る

結論

  • setUpBeforeClass() が実行されるタイミングでは factory は使えない。(そもそもデータの状態が他のテストケースに依存しないようにした方が良い)
  • setUp() 内で parent::setUp() 呼ぶの忘れてない?(公式にも「テストクラスに独自のsetUpメソッドを定義する場合は、親のクラスのparent::setUp()parent::tearDown()を確実に呼び出してください」と記載あり。)
  • factoryクラス側で $factory->define(Post::class, function (Faker $faker) { とか書いてるけどほんとは App\Models\Post::classだったりしない?

詳細

テストコードを書いてみたものの、

InvalidArgumentException: Unable to locate factory with name [default] [App\Models\LocalPostGroup].

というエラーが出て進まなかったのでした。

最初は factory クラス側で ->define() に渡すモデルクラスの namespace が間違っていたのが原因。

2回目は setUp() で parent::setUp() 呼び出すの忘れてたのが原因でしたとさー。

参考情報:PHPUnit on Laravel setUpBeforeClass can’t find factory class – Stack Overflow

LaravelFactory,Laravel,PHP,Test

Posted by S