結構前に書いた記事なのですが、投稿せずに下書きにしたままだったので、今更だけど投稿!ww
『Laracasts』の、こちらのページでテストコードの書き方を学習をしていました。
但し、動画通りに書いても動かなかったりする箇所があったので、私なりに躓いた箇所を以下にご紹介!(と言っても最初の方の5点だけ。。。ww)
※ご注意:私の場合、環境はXAMPP for Windowsでした。それ以外で作る場合は、同じエラーが出るとは限らないので、参考程度にどうぞ。
その1:EPISODE 2 Let's Begin With a Test の回にて。
動画内では、
『public function a_user_can_create_a_project() 』という名前の関数を使ってテストを進めていきますが、関数名の先頭に『test』とつけないと動きません。
『public function test_a_user_can_create_a_project() 』として、テストの時は必ず関数名の最初にtestをつけるようにしましょう!
その2:同じく EPISODE 2 Let's Begin With a Test の回にて。
動画内では、php unitを発動させる時に、
『vendor/bin/phpunit tests/Feature/ProjectsTest.php』とコマンドを打っていますが、私の場合、これを実行すると、パスが通っていないと言われてエラーになりました。
調べてみると、どうやらグローバルインスタンスのphp unitを使っていることが原因のようで、composerのローカルバージョンのphp unitを使えばよいとのこと。。。
『vendor\bin\phpunit tests/Feature/ProjectsTest.php』として、赤文字部分のコマンドを、スラッシュではなく、バックスラッシュで書くことで解決しました!
その3:同じく EPISODE 2 Let's Begin With a Test の回にて。
動画内で、ProjectsControllerに『use App\Project;』とProjectモデルをインポートする箇所がありますが、これはLaravel8では、『use App\Models\Project;』としないと動かないので注意です。
これ以降も、Laravel8で作業する場合は、モデルのパスは常に変更する必要があります!
その4: EPISODE 3 Testing Request Validation の回にて。
Facotryを使ってテストデータを挿入する箇所があります。
動画内では、Factoryのファイルを作る際に、
『php artisan make:factory ProjectFactory --model=”App\Project”』としていますが、
Laravel8で作業する場合は、『php artisan make:factory ProjectFactory --model=Project』としてください。
また、動画内では、tinkerで操作するときに、『factory('App\Project')->make()』としてデータ挿入していますが、Laravel8では、『App\Models\Project::factory()->make()』としないと動きません。
実際にデータベースにデータ挿入していくときも、
『factory('App\Project', 5)->create();』
↓
『App\Models\Project::factory(5)->create();』となります。
ProjectFactory.phpの書き方にも変更があります。
動画内では、
$factory->define(Project::class, function (Faker $faker) {
return [
'title' => $faker->sentence,
'description' => $faker->paragraph
];
});
このように書かれていますが、これは以下のように変更する必要があります。↓↓
public function definition()
{
return [
'title' => $this->faker->sentence,
'description' => $this->faker->paragraph
];
}
その5:EPISODE 4 Model Tests の回にて。
UnitTestを書く際、作られたファイルにはデフォルトで『use PHPUnit\Framework\TestCase;』というクラスがインポートされています。
しかし、これだとFactoryを使う際にエラーが出ます。
代わりに、『use Tests\TestCase;』をインポートするようにしてください。