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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/30 07:43