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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHPUnit

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

Q&A

解決済

2回答

5789閲覧

Laravelについて:ユニットテスト(データベースのテスト)における問題

Reikirin

総合スコア23

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHPUnit

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

0グッド

0クリップ

投稿2020/10/05 11:32

Laravelに関する質問です。
以下の様に「database」内の「factories」内の「UserFactory.php」と、「tests」内の「Feature」内の「HelloTest.php」を記述しました。
この時、ターミナルで「vendor/bin/phpunit」を実行するのですが、
「Tests\Feature\HelloTest::testHello
Error: Call to undefined function Tests\Feature\factory()
~/Desktop/laravelapp/tests/Feature/HelloTest.php:24」
と出て来てしまいます。
24行目のfactoryの修正を、「$user = 」or「$users = 」や、「$this->」にして見たりと、試して見ましたが、一向に変化がありません。
24行目のfactoryの修正の仕方が分かる方がいらっしゃればご教授願います。

UserFactory

1<?php 2 3namespace Database\Factories; 4 5use App\Models\User; 6use App\Models\Person; 7use Illuminate\Database\Eloquent\Factories\Factory; 8use Illuminate\Support\Str; 9use Faker\Generator as Faker; 10 11$factory->define(App\Models\User::class, function (Faker $faker) { 12 static $password; 13 14 return [ 15 'name' => $faker->name, 16 'email' => $faker->unique()->safeEmail, 17 'email_verified_at' => now(), 18 'password' => '???', // password 19 'remember_token' => Str::random(10), 20 ]; 21}); 22 23$factory->define(App\Models\Person::class, function (Faker $faker) { 24 return [ 25 'name' => $faker->name, 26 'mail' => $faker->safeEmail, 27 'age' => random_int(1,99), 28 ]; 29});

HelloTest

1<?php 2 3namespace Tests\Feature; 4 5use Illuminate\Foundation\Testing\DatabaseTransactions; 6use Illuminate\Foundation\Testing\DatabaseMigrations; 7use Illuminate\Foundation\Testing\WithoutMiddleware; 8use Tests\TestCase; 9use App\Models\User; 10use App\Models\Person; 11use Database\Factories\UserFactory; 12 13class HelloTest extends TestCase 14{ 15 use DatabaseMigrations; 16 /** 17 * A basic feature test example. 18 * 19 * @return void 20 */ 21 public function testHello() 22 { 23 // ダミーで利用するデータ 24 factory(User::class)->create([ 25 'name' => 'AAA', 26 'email' => 'BBB@CCC.COM', 27 'password' => 'ABCABC', 28 ]); 29 factory(User::class, 10)->create(); 30 31 $this->assertDatabaseHas('users', [ 32 'name' => 'AAA', 33 'email' => 'BBB@CCC.COM', 34 'password' => 'ABCABC', 35 ]); 36 37 // ダミーで利用するデータ 38 factory(Person::class)->create([ 39 'name' => 'XXX', 40 'mail' => 'YYY@ZZZ.COM', 41 'age' => '123', 42 ]); 43 factory(Person::class, 10)->create(); 44 45 $this->assertDatabaseHas('people', [ 46 'name' => 'XXX', 47 'mail' => 'YYY@ZZZ.COM', 48 'age' => '123', 49 ]); 50 } 51}

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

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

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

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

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

guest

回答2

0

ベストアンサー

いつもの
「Laravelの話をする時はバージョン情報が最も重要」

Laravel8ではファクトリが完全に書き直されたので7以前の情報は全く役に立たない。
Laravel8の新しい使い方をするしかない。
https://readouble.com/laravel/8.x/ja/database-testing.html

laravel/legacy-factoriesはあるけどあくまでも旧バージョンからバージョンアップしたプロジェクトでfactory()をそのまま使うための救済処置。

DatabaseMigrationsとか使ってる辺り見てる情報源がかなり古い。
随分前にRefreshDatabaseが標準になってるはず。
Laravelはバージョンアップで容赦なく変わっていくので古い情報はあっという間に使えなくなる。

投稿2020/10/05 12:09

kawax

総合スコア10377

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

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

Reikirin

2020/10/05 12:41

おっしゃる通りです、、、PHPフレームワーク Laravel入門の第1版第5刷(2019年6月11日)を使っているので、古いと言っても1年前のものですが、内容はLaravel5.5のを使っているみたいです、、、
guest

0

factory(Person::class)
これを
factory(App\Models\Person::class)
に変えてもだめでしょうか?

投稿2020/10/05 11:49

firegrape

総合スコア902

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

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

Reikirin

2020/10/05 12:43

試して見ましたがだめでした、、、Laravelのバージョンが問題みたいです。ご回答いただいてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問