Laravelのブラウザtest duskとDBtestを混在させる場合に use RefreshDatabase;を使ってハマった話
Laravelでブラウザテストをしていますが、testの際のシナリオとして、以下の様な検証をするケースがありました。
- DBに値を入れない状態でtest開始
- いくつかのtestを行う。
- あるtableにレコードを入れた状態で同様のtestを行い表示の確認
tableが0件の状態とレコードがある状態で表示が変わるので、その検証。という事です。
ところが、テストの各項目の都度、 setUp() メソッドに書かれた refresh:migrate
, db:seed
とかいちいちやっていると時間がかかるので、以前の記事にある様に、初回だけ やって、後は現状のDBを使ったまま破綻しないDB操作の手順を考えつつtestを書く。という事をしてました。
<?php protected static $db_inited = false; use RefreshDatabase; protected static function initDB() { Artisan::call('migrate:refresh'); // 個別でシーディング Artisan::call('db:seed', ['--class' => 'CommunitiesTableSeeder']); Artisan::call('db:seed', ['--class' => 'CommunitiesUsersStatusesTableSeeder']); Artisan::call('db:seed', ['--class' => 'CommunityUserTableSeeder']); Artisan::call('db:seed', ['--class' => 'MacAddressesTableSeeder']); Artisan::call('db:seed', ['--class' => 'RolesTableSeeder']); Artisan::call('db:seed', ['--class' => 'RoutersTableSeeder']); Artisan::call('db:seed', ['--class' => 'UsersTableSeeder']); // Tumolink Tableは後で検証するので今は使わない // Artisan::call('db:seed', ['--class' => 'TumolinkTableSeeder']); } public function setUp() { parent::setUp(); // 以前の記事にもある通り、testの初回だけシーディングを実施 if (!static::$db_inited) { static::$db_inited = true; static::initDB(); } } // 以下省略 }
さて、上記の様な検証をしようと思っていざ以下の様なtestを書いた所、DBに値が入らないままブラウザtestが実施されて散々悩みました。
<?php /** * @test */ public function 未ログインで一覧画面表示のテスト() { // 検証用のデータを入れる factory(Tumolink::class)->create([ 'community_user_id' => 4, ]); factory(Tumolink::class)->create([ 'community_user_id' => 5, ]); factory(Tumolink::class)->create([ 'community_user_id' => 30, ]); // 入った検証データが表示される筈なので検証、しかしエラーとなる $this->browse(function (Browser $browser) { $browser->visit('/') ->assertSee('Tumolinkレコードが入った事で表示される文言'); }); // クエリも書かれずなぜかこのassertは通る $this->assertDatabaseHas('tumolink', ['community_user_id' => 30]); }
で、logを追うと、
2019-02-14T05:37:21.443929Z 90 Query START TRANSACTION 2019-02-14T05:37:21.574578Z 90 Prepare insert into `tumolink` (`community_user_id`, `maybe_arraival`, `maybe_departure`, `google_home_push`, `created_at`, `updated_at`) values (?, ?, ?, ?, ?, ?) 2019-02-14T05:37:21.575225Z 90 Execute insert into `tumolink` (`community_user_id`, `maybe_arraival`, `maybe_departure`, `google_home_push`, `created_at`, `updated_at`) values (4, '2019-02-14 15:37:21', '2019-02-14 15:37:21', 1, '2019-02-09 14:37:21', '2019-02-14 14:37:21') 2019-02-14T05:37:21.575591Z 90 Close stmt 2019-02-14T05:37:21.576674Z 90 Prepare insert into `tumolink` (`community_user_id`, `maybe_arraival`, `maybe_departure`, `google_home_push`, `created_at`, `updated_at`) values (?, ?, ?, ?, ?, ?) 2019-02-14T05:37:21.577048Z 90 Execute insert into `tumolink` (`community_user_id`, `maybe_arraival`, `maybe_departure`, `google_home_push`, `created_at`, `updated_at`) values (5, '2019-02-14 15:37:21', '2019-02-14 15:37:21', 1, '2019-02-09 14:37:21', '2019-02-14 14:37:21') 2019-02-14T05:37:21.579742Z 90 Close stmt 2019-02-14T05:37:21.581257Z 90 Prepare insert into `tumolink` (`community_user_id`, `maybe_arraival`, `maybe_departure`, `google_home_push`, `created_at`, `updated_at`) values (?, ?, ?, ?, ?, ?) 2019-02-14T05:37:21.582885Z 90 Execute insert into `tumolink` (`community_user_id`, `maybe_arraival`, `maybe_departure`, `google_home_push`, `created_at`, `updated_at`) values (30, '2019-02-14 15:37:21', '2019-02-14 15:37:21', 1, '2019-02-09 14:37:21', '2019-02-14 14:37:21') 2019-02-14T05:37:21.583499Z 90 Close stmt 2019-02-14T05:37:23.829384Z 91 Connect homestead@localhost on whois_test using TCP/IP 2019-02-14T05:37:23.832003Z 91 Query use `whois_test` 2019-02-14T05:37:23.833594Z 91 Prepare set names 'utf8mb4' collate 'utf8mb4_unicode_ci' 2019-02-14T05:37:23.833821Z 91 Execute set names 'utf8mb4' collate 'utf8mb4_unicode_ci' 2019-02-14T05:37:23.834181Z 91 Close stmt 2019-02-14T05:37:23.834538Z 91 Prepare set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 2019-02-14T05:37:23.834770Z 91 Execute set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 2019-02-14T05:37:23.834991Z 91 Close stmt 2019-02-14T05:37:23.835343Z 91 Prepare select `url_path` from `communities` where `url_path` = ? limit 1 2019-02-14T05:37:23.836422Z 91 Execute select `url_path` from `communities` where `url_path` = 'hoge' limit 1 2019-02-14T05:37:23.836692Z 91 Close stmt 2019-02-14T05:37:24.005278Z 91 Prepare select * from `communities` where `url_path` = ? limit 1 2019-02-14T05:37:24.005837Z 91 Execute select * from `communities` where `url_path` = 'hoge' limit 1 2019-02-14T05:37:24.006340Z 91 Close stmt 2019-02-14T05:37:24.046781Z 91 Prepare select `user_id` from `communities` where `id` = ? 2019-02-14T05:37:24.047358Z 91 Execute select `user_id` from `communities` where `id` = 1 2019-02-14T05:37:24.047703Z 91 Close stmt 2019-02-14T05:37:24.081444Z 91 Prepare select `user_id`, `unique_name`, `name`, `min_arraival_at`, `last_access` from `community_user` left join `users` on `users`.`id` = `community_user`.`user_id` inner join `communities_users_statuses` on `communities_users_statuses`.`id` = `community_user`.`id` inner join (select community_user_id, min(arraival_at) as min_arraival_at from `mac_addresses` where (`hide` = ? and `current_stay` = ?) group by `community_user_id` order by `min_arraival_at` desc) as `mac_addresses` on `community_user`.`id` = `mac_addresses`.`community_user_id` where (`user_id` <> ? and `community_id` = ? and `provisional` = ?) 2019-02-14T05:37:24.081937Z 91 Execute select `user_id`, `unique_name`, `name`, `min_arraival_at`, `last_access` from `community_user` left join `users` on `users`.`id` = `community_user`.`user_id` inner join `communities_users_statuses` on `communities_users_statuses`.`id` = `community_user`.`id` inner join (select community_user_id, min(arraival_at) as min_arraival_at from `mac_addresses` where (`hide` = 0 and `current_stay` = 1) group by `community_user_id` order by `min_arraival_at` desc) as `mac_addresses` on `community_user`.`id` = `mac_addresses`.`community_user_id` where (`user_id` <> 1 and `community_id` = 1 and `provisional` = 1) 2019-02-14T05:37:24.082748Z 91 Close stmt 2019-02-14T05:37:24.116417Z 91 Prepare select `user_id`, `unique_name`, `name`, `min_arraival_at`, `last_access` from `community_user` left join `users` on `users`.`id` = `community_user`.`user_id` inner join `communities_users_statuses` on `communities_users_statuses`.`id` = `community_user`.`id` inner join (select community_user_id, min(arraival_at) as min_arraival_at from `mac_addresses` where (`hide` = ? and `current_stay` = ?) group by `community_user_id` order by `min_arraival_at` desc) as `mac_addresses` on `community_user`.`id` = `mac_addresses`.`community_user_id` where (`user_id` <> ? and `community_id` = ? and `provisional` = ?) 2019-02-14T05:37:24.116823Z 91 Execute select `user_id`, `unique_name`, `name`, `min_arraival_at`, `last_access` from `community_user` left join `users` on `users`.`id` = `community_user`.`user_id` inner join `communities_users_statuses` on `communities_users_statuses`.`id` = `community_user`.`id` inner join (select community_user_id, min(arraival_at) as min_arraival_at from `mac_addresses` where (`hide` = 0 and `current_stay` = 1) group by `community_user_id` order by `min_arraival_at` desc) as `mac_addresses` on `community_user`.`id` = `mac_addresses`.`community_user_id` where (`user_id` <> 1 and `community_id` = 1 and `provisional` = 0) 2019-02-14T05:37:24.117543Z 91 Close stmt 2019-02-14T05:37:24.153092Z 91 Prepare select `user_id` from `community_user` inner join `communities_users_statuses` on `community_user`.`id` = `communities_users_statuses`.`id` where (`user_id` <> ? and `community_id` = ? and `hide` = ?) 2019-02-14T05:37:24.153243Z 91 Execute select `user_id` from `community_user` inner join `communities_users_statuses` on `community_user`.`id` = `communities_users_statuses`.`id` where (`user_id` <> 1 and `community_id` = 1 and `hide` = 0) 2019-02-14T05:37:24.153519Z 91 Close stmt 2019-02-14T05:37:24.178974Z 91 Prepare select `user_id`, `name`, `last_access` from `community_user` left join `users` on `users`.`id` = `community_user`.`user_id` inner join `communities_users_statuses` on `communities_users_statuses`.`id` = `community_user`.`id` where (`community_id` = ?) and `community_user`.`user_id` in (?, ?, ?, ?, ?) order by `last_access` desc 2019-02-14T05:37:24.179504Z 91 Execute select `user_id`, `name`, `last_access` from `community_user` left join `users` on `users`.`id` = `community_user`.`user_id` inner join `communities_users_statuses` on `communities_users_statuses`.`id` = `community_user`.`id` where (`community_id` = 1) and `community_user`.`user_id` in (4, 9, 10, 11, 12) order by `last_access` desc 2019-02-14T05:37:24.180164Z 91 Close stmt 2019-02-14T05:37:24.204641Z 91 Prepare select `tumolink`.*, `users`.`name`, `users`.`name_reading`, `users`.`provisional`, `communities_users_statuses`.`hide` from `tumolink` inner join `community_user` on `community_user`.`id` = `tumolink`.`community_user_id` inner join `communities_users_statuses` on `community_user`.`id` = `communities_users_statuses`.`id` inner join `users` on `users`.`id` = `community_user`.`user_id` where `community_user`.`community_id` = ? 2019-02-14T05:37:24.205081Z 91 Execute select `tumolink`.*, `users`.`name`, `users`.`name_reading`, `users`.`provisional`, `communities_users_statuses`.`hide` from `tumolink` inner join `community_user` on `community_user`.`id` = `tumolink`.`community_user_id` inner join `communities_users_statuses` on `community_user`.`id` = `communities_users_statuses`.`id` inner join `users` on `users`.`id` = `community_user`.`user_id` where `community_user`.`community_id` = 1 2019-02-14T05:37:24.205533Z 91 Close stmt 2019-02-14T05:37:24.925167Z 91 Quit 2019-02-14T05:37:25.928286Z 90 Query ROLLBACK 2019-02-14T05:37:25.933217Z 90 Quit
DBに検証用の値を入れるのは確認できます。その後、該当ページを表示して検証する際に呼ばれるクエリを読んだ直後にROLLBACKが走っています。
そしてそのあとに本来であれば、DBの値を検証する
$this->assertDatabaseHas('tumolink', ['community_user_id' => 30]);
に相当するクエリが走るべきなのですが、これをlogで確認できないまま、次のtestのクエリが走っていました。
で、色々なやんだ結果testクラスの上に書くこいつを消したところ上手くいきました。
// use RefreshDatabase;
SQL LOG
2019-02-14T05:45:25.585096Z 124 Connect homestead@localhost on whois_test using TCP/IP 2019-02-14T05:45:25.585600Z 124 Query use `whois_test` 2019-02-14T05:45:25.585867Z 124 Prepare set names 'utf8mb4' collate 'utf8mb4_unicode_ci' 2019-02-14T05:45:25.586105Z 124 Execute set names 'utf8mb4' collate 'utf8mb4_unicode_ci' 2019-02-14T05:45:25.586397Z 124 Close stmt 2019-02-14T05:45:25.586579Z 124 Prepare set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 2019-02-14T05:45:25.586777Z 124 Execute set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 2019-02-14T05:45:25.586958Z 124 Close stmt 2019-02-14T05:45:25.587218Z 124 Prepare insert into `tumolink` (`community_user_id`, `maybe_arraival`, `maybe_departure`, `google_home_push`, `created_at`, `updated_at`) values (?, ?, ?, ?, ?, ?) 2019-02-14T05:45:25.587477Z 124 Execute insert into `tumolink` (`community_user_id`, `maybe_arraival`, `maybe_departure`, `google_home_push`, `created_at`, `updated_at`) values (4, '2019-02-14 15:45:25', '2019-02-14 15:45:25', 1, '2019-02-09 14:45:25', '2019-02-14 14:45:25') 2019-02-14T05:45:25.591928Z 124 Close stmt 2019-02-14T05:45:25.592896Z 124 Prepare insert into `tumolink` (`community_user_id`, `maybe_arraival`, `maybe_departure`, `google_home_push`, `created_at`, `updated_at`) values (?, ?, ?, ?, ?, ?) 2019-02-14T05:45:25.593254Z 124 Execute insert into `tumolink` (`community_user_id`, `maybe_arraival`, `maybe_departure`, `google_home_push`, `created_at`, `updated_at`) values (5, '2019-02-14 15:45:25', '2019-02-14 15:45:25', 1, '2019-02-09 14:45:25', '2019-02-14 14:45:25') 2019-02-14T05:45:25.594983Z 124 Close stmt 2019-02-14T05:45:25.595811Z 124 Prepare insert into `tumolink` (`community_user_id`, `maybe_arraival`, `maybe_departure`, `google_home_push`, `created_at`, `updated_at`) values (?, ?, ?, ?, ?, ?) 2019-02-14T05:45:25.596246Z 124 Execute insert into `tumolink` (`community_user_id`, `maybe_arraival`, `maybe_departure`, `google_home_push`, `created_at`, `updated_at`) values (30, '2019-02-14 15:45:25', '2019-02-14 15:45:25', 1, '2019-02-09 14:45:25', '2019-02-14 14:45:25') 2019-02-14T05:45:25.597019Z 124 Close stmt 2019-02-14T05:45:27.846052Z 125 Connect homestead@localhost on whois_test using TCP/IP 2019-02-14T05:45:27.848972Z 125 Query use `whois_test` 2019-02-14T05:45:27.850521Z 125 Prepare set names 'utf8mb4' collate 'utf8mb4_unicode_ci' 2019-02-14T05:45:27.850730Z 125 Execute set names 'utf8mb4' collate 'utf8mb4_unicode_ci' 2019-02-14T05:45:27.850912Z 125 Close stmt 2019-02-14T05:45:27.851136Z 125 Prepare set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 2019-02-14T05:45:27.851316Z 125 Execute set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 2019-02-14T05:45:27.851492Z 125 Close stmt 2019-02-14T05:45:27.851773Z 125 Prepare select `url_path` from `communities` where `url_path` = ? limit 1 2019-02-14T05:45:27.852839Z 125 Execute select `url_path` from `communities` where `url_path` = 'hoge' limit 1 2019-02-14T05:45:27.853121Z 125 Close stmt 2019-02-14T05:45:28.046130Z 125 Prepare select * from `communities` where `url_path` = ? limit 1 2019-02-14T05:45:28.046618Z 125 Execute select * from `communities` where `url_path` = 'hoge' limit 1 2019-02-14T05:45:28.047275Z 125 Close stmt 2019-02-14T05:45:28.091173Z 125 Prepare select `user_id` from `communities` where `id` = ? 2019-02-14T05:45:28.091653Z 125 Execute select `user_id` from `communities` where `id` = 1 2019-02-14T05:45:28.092026Z 125 Close stmt 2019-02-14T05:45:28.127509Z 125 Prepare select `user_id`, `unique_name`, `name`, `min_arraival_at`, `last_access` from `community_user` left join `users` on `users`.`id` = `community_user`.`user_id` inner join `communities_users_statuses` on `communities_users_statuses`.`id` = `community_user`.`id` inner join (select community_user_id, min(arraival_at) as min_arraival_at from `mac_addresses` where (`hide` = ? and `current_stay` = ?) group by `community_user_id` order by `min_arraival_at` desc) as `mac_addresses` on `community_user`.`id` = `mac_addresses`.`community_user_id` where (`user_id` <> ? and `community_id` = ? and `provisional` = ?) 2019-02-14T05:45:28.128013Z 125 Execute select `user_id`, `unique_name`, `name`, `min_arraival_at`, `last_access` from `community_user` left join `users` on `users`.`id` = `community_user`.`user_id` inner join `communities_users_statuses` on `communities_users_statuses`.`id` = `community_user`.`id` inner join (select community_user_id, min(arraival_at) as min_arraival_at from `mac_addresses` where (`hide` = 0 and `current_stay` = 1) group by `community_user_id` order by `min_arraival_at` desc) as `mac_addresses` on `community_user`.`id` = `mac_addresses`.`community_user_id` where (`user_id` <> 1 and `community_id` = 1 and `provisional` = 1) 2019-02-14T05:45:28.128830Z 125 Close stmt 2019-02-14T05:45:28.161408Z 125 Prepare select `user_id`, `unique_name`, `name`, `min_arraival_at`, `last_access` from `community_user` left join `users` on `users`.`id` = `community_user`.`user_id` inner join `communities_users_statuses` on `communities_users_statuses`.`id` = `community_user`.`id` inner join (select community_user_id, min(arraival_at) as min_arraival_at from `mac_addresses` where (`hide` = ? and `current_stay` = ?) group by `community_user_id` order by `min_arraival_at` desc) as `mac_addresses` on `community_user`.`id` = `mac_addresses`.`community_user_id` where (`user_id` <> ? and `community_id` = ? and `provisional` = ?) 2019-02-14T05:45:28.162015Z 125 Execute select `user_id`, `unique_name`, `name`, `min_arraival_at`, `last_access` from `community_user` left join `users` on `users`.`id` = `community_user`.`user_id` inner join `communities_users_statuses` on `communities_users_statuses`.`id` = `community_user`.`id` inner join (select community_user_id, min(arraival_at) as min_arraival_at from `mac_addresses` where (`hide` = 0 and `current_stay` = 1) group by `community_user_id` order by `min_arraival_at` desc) as `mac_addresses` on `community_user`.`id` = `mac_addresses`.`community_user_id` where (`user_id` <> 1 and `community_id` = 1 and `provisional` = 0) 2019-02-14T05:45:28.162965Z 125 Close stmt 2019-02-14T05:45:28.188154Z 125 Prepare select `user_id` from `community_user` inner join `communities_users_statuses` on `community_user`.`id` = `communities_users_statuses`.`id` where (`user_id` <> ? and `community_id` = ? and `hide` = ?) 2019-02-14T05:45:28.188561Z 125 Execute select `user_id` from `community_user` inner join `communities_users_statuses` on `community_user`.`id` = `communities_users_statuses`.`id` where (`user_id` <> 1 and `community_id` = 1 and `hide` = 0) 2019-02-14T05:45:28.189100Z 125 Close stmt 2019-02-14T05:45:28.231102Z 125 Prepare select `user_id`, `name`, `last_access` from `community_user` left join `users` on `users`.`id` = `community_user`.`user_id` inner join `communities_users_statuses` on `communities_users_statuses`.`id` = `community_user`.`id` where (`community_id` = ?) and `community_user`.`user_id` in (?, ?, ?, ?, ?) order by `last_access` desc 2019-02-14T05:45:28.231659Z 125 Execute select `user_id`, `name`, `last_access` from `community_user` left join `users` on `users`.`id` = `community_user`.`user_id` inner join `communities_users_statuses` on `communities_users_statuses`.`id` = `community_user`.`id` where (`community_id` = 1) and `community_user`.`user_id` in (4, 9, 10, 11, 12) order by `last_access` desc 2019-02-14T05:45:28.232347Z 125 Close stmt 2019-02-14T05:45:28.258731Z 125 Prepare select `tumolink`.*, `users`.`name`, `users`.`name_reading`, `users`.`provisional`, `communities_users_statuses`.`hide` from `tumolink` inner join `community_user` on `community_user`.`id` = `tumolink`.`community_user_id` inner join `communities_users_statuses` on `community_user`.`id` = `communities_users_statuses`.`id` inner join `users` on `users`.`id` = `community_user`.`user_id` where `community_user`.`community_id` = ? 2019-02-14T05:45:28.259224Z 125 Execute select `tumolink`.*, `users`.`name`, `users`.`name_reading`, `users`.`provisional`, `communities_users_statuses`.`hide` from `tumolink` inner join `community_user` on `community_user`.`id` = `tumolink`.`community_user_id` inner join `communities_users_statuses` on `community_user`.`id` = `communities_users_statuses`.`id` inner join `users` on `users`.`id` = `community_user`.`user_id` where `community_user`.`community_id` = 1 2019-02-14T05:45:28.260029Z 125 Close stmt 2019-02-14T05:45:29.048109Z 125 Quit 2019-02-14T05:45:29.981275Z 124 Prepare select count(*) as aggregate from `tumolink` where (`community_user_id` = ?) 2019-02-14T05:45:29.981864Z 124 Execute select count(*) as aggregate from `tumolink` where (`community_user_id` = 30) 2019-02-14T05:45:29.982288Z 124 Close stmt
‘use RefreshDatabase‘が無いため当然ROLLBACKはかかりません。また、DBの値を検討する以下のクエリもlogの最後の方に見られます。
2019-02-14T05:45:29.981864Z 124 Execute select count(*) as aggregate from `tumolink` where (`community_user_id` = 30)
RefreshDatabase の動きですが、有志作成の日本語リファレンスでは以下の様にあります。
https://readouble.com/laravel/5.5/ja/database-testing.html
各テスト後のデータベースリセット 前のテストがその後のテストデータに影響しないように、各テストの後にデータベースをリセットできると便利です。インメモリデータベースを使っていても、トラディショナルなデータベースを使用していても、RefreshDatabaseトレイトにより、マイグレーションに最適なアプローチが取れます。テストクラスてこのトレイトを使えば、全てが処理されます。
ところが実際に動かしてSQLのLOGを見ると、どうもtestのfunction単位でrollbackが発生するのでは無いのは明らかです。
このような動きの為、ブラウザの表示をして確認が取れる前に rollback が走ってせっかく挿入したレコードが消え、その後ブラウザの表示が完了して検証をする。といった動作の為、testが失敗する様です。
<?php public function 未ログインで恵比寿_滞在者一覧画面閲覧_ツモリスト有り() { factory(Tumolink::class)->create([ 'community_user_id' => 30, ]); $this->browse(function (Browser $browser) { $browser->visit('/') ->assertSee('Tumolinkレコードが入った事で表示される文言'); }); // RefreshDatabase を使うとここでrollbackが発生した上 // select count(*) as aggregate from `tumolink` where (`community_user_id` = 30) のクエリも走らず次のtestに行く $this->assertDatabaseHas('tumolink', ['community_user_id' => 30]); }
ではなぜ?という細かい所までは追ってませんが、ひとまずこんなハマり所があるので気を付けましょう。という話でした。