質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

12439閲覧

PHPUnitで発生するエラーの意味と解決策を教えてください。InvalidArgumentException: Unable to locate factory with name

fujita222

総合スコア14

PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/03/30 07:17

LaraelのPHPUnit実行時に発生するエラーの意味と、解決策を教えてください。

2日ほど粘ってるんですが、まったく解決方法がわかりません。。(泣)

[環境]
contos7.x
php7.2
Laravel5.7
PHPUnit7.5.1

[困ってる事]
Laravelを勉強中です。

PHPUnitのテストでfactoryとfakerを使ってmodelのテストのためにテストデータを保存する処理を以下で行っています。
PHPUnitを実行するとエラーが発生して先に進めない状況です。

以下、問題のテストファイルです。

OfferTest.php

php

1namespace Tests\Unit; 2 3use Tests\TestCase; 4use Illuminate\Foundation\Testing\WithFaker; 5use Illuminate\Foundation\Testing\RefreshDatabase; 6 7use App\User; 8use App\Offer; 9use App\Order; 10 11class OfferTest extends TestCase 12{ 13 14 /** 15 * A basic test example. 16 * 17 * @return void 18 */ 19 public function testRecent() 20 { 21 $users = factory(User::class, 2)->create(); 22 $order = factory(Order::class)->create([ 23 'user_id' => $users[0]->attributesToArray()['id'], 24 ]); 25 26 $offer = factory(Offer::class)->create([ 27 'offer_user_id' => $users[1]->attributesToArray()['id'], 28 'order_id' => $order->attributesToArray()['id'], 29 ]); 30 31 32 $this->assertTrue(true); 33 } 34}

PHPUnitを実行して発生しているエラーログは下記です。

1) Tests\Unit\OfferTest::testRecent InvalidArgumentException: Unable to locate factory with name [label] [App\Order]. /vagrant/laravel_test/5.7/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php:269 /vagrant/laravel_test/5.7/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php:292 /vagrant/laravel_test/5.7/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/GuardsAttributes.php:122 /vagrant/laravel_test/5.7/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php:300 /vagrant/laravel_test/5.7/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php:219 /vagrant/laravel_test/5.7/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php:178 /vagrant/laravel_test/5.7/tests/Unit/OfferTest.php:26

怒られている26行目は上記OfferTest.phpのここにあたります。
user_id' => $users[0]->attributesToArray()['id'],

factoryは以下です。


OrderFactory.php

php

1$factory->define(Model::class, function (Faker $faker) { 2 return [ 3 // 4 'title' => $faker->realText($maxNbChars = 20, $indexSize = 1), 5 'body' => $faker->realText($maxNbChars = 20, $indexSize = 1), 6 'requrement' => $faker->realText($maxNbChars = 20, $indexSize = 1), 7 'fee' => $faker->numberBetween($min = 5, $max = 200), 8 'user_id' => $faker->numberBetween($min = 1, $max = 9), 9 'fee_type' => $faker->numberBetween($min = 0, $max = 2), 10 'created_at' => $faker->dateTime($max = 'now', $timezone = date_default_timezone_get()), 11 'updated_at' => $faker->dateTime($max = 'now', $timezone = date_default_timezone_get()), 12 ]; 13});

UserFactory.php

PHP

1$factory->define(App\User::class, function (Faker $faker) { 2 return [ 3 'name' => $faker->name, 4 'purpose' => $faker->numberBetween($min = 1, $max = 2), 5 'email' => $faker->unique()->safeEmail, 6 'email_verified_at' => date('Y-m-d', strtotime('-1 week')), 7 'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9dfacbcoQgdIVFlYg7B77UdFm', // secret 8 'remember_token' => str_random(10), 9 ]; 10});

どうか、プロの皆様、お力をお借りできますと幸いです。
よろしくお願いいたしますm(_ _)m

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

factoryの定義が原因ではないでしょうか。

$factory->define(Model::class, function (Faker $faker) { ↓ $factory->define(App\Order::class, function (Faker $faker) {

投稿2019/03/30 07:37

xenbeat

総合スコア4258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fujita222

2019/03/30 07:43

ご指摘のとおりでした!動きました;; @xenbeat様、本当に本当に感謝しかありません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問