LoginSignup
2
0

More than 1 year has passed since last update.

Laracastsでテストコードを勉強したときのエラーメモ

Posted at

結構前に書いた記事なのですが、投稿せずに下書きにしたままだったので、今更だけど投稿!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の書き方にも変更があります。
動画内では、

ProjectFactory.php
$factory->define(Project::class, function (Faker $faker) {
    return [
        'title' => $faker->sentence,
        'description' => $faker->paragraph
    ];
});

このように書かれていますが、これは以下のように変更する必要があります。↓↓

ProjectFactory.php
    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;』をインポートするようにしてください。

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0