[Laravel8.x] テスト用データベースでUnitテスト

Unitテストでは、テスト用のデータベースを作り、それでテストする。
Schemaを使う。

mysql> show databases;
mysql> show tables;

mysql> create database unittest;
$ php artisan migrate –env=testing

mysql> use unittest;
mysql> describe users;

use Illuminate\Support\Facades\Schema;
    public function testExample()
    {
        $this->assertTrue(
            Schema::hasColumns('users',[
                'id', 'name', 'email'
            ]),
            1
        );
    }

$ vendor/bin/phpunit tests/Feature/AdminTest.php
PHPUnit 9.4.2 by Sebastian Bergmann and contributors.

. 1 / 1 (100%)

Time: 00:00.086, Memory: 26.00 MB

OK (1 test, 1 assertion)

DBにデータ挿入

    public function testExample()
    {
        $user = new User();
        $user->name ="hpscript";
        $user->email = "info@hpscript.com";
        $user->password = "password";
        $user->role_id = 1;
        $saveUser = $user->save();

        $this->assertTrue($saveUser);
    }

$ vendor/bin/phpunit tests/Feature/AdminTest.php
PHPUnit 9.4.2 by Sebastian Bergmann and contributors.

. 1 / 1 (100%)

Time: 00:00.094, Memory: 26.00 MB

OK (1 test, 1 assertion)

mysql> select * from users;
+—-+———-+——————-+——————-+———-+——————-+—————————+—————-+—————+—————–+——————–+———————+———————+———+
| id | name | email | email_verified_at | password | two_factor_secret | two_factor_recovery_codes | remember_token | last_login_at | current_team_id | profile_photo_path | created_at | updated_at | role_id |
+—-+———-+——————-+——————-+———-+——————-+—————————+—————-+—————+—————–+——————–+———————+———————+———+
| 1 | hpscript | info@hpscript.com | NULL | password | NULL | NULL | NULL | NULL | NULL | NULL | 2021-01-03 16:44:08 | 2021-01-03 16:44:08 | 1 |
+—-+———-+——————-+——————-+———-+——————-+—————————+—————-+—————+—————–+——————–+———————+———————+———+
1 row in set (0.00 sec)

おおお、入ってる。

use RefreshDatabase;とすると、データが削除されます。

mysql> select * from users;
Empty set (0.00 sec)

なるほど、ちょっと理解してきた。