なにがしたいの
リンクをクリックしたら、別タブを開いて内容を確認するテストを実施したいが、公式には情報がない。。。
例えば、ユーザー一覧を表示して、ユーザー参照リンクをクリックすると別タブで詳細が表示されるようなイメージ。これをDuskでテストしたい。
テストケース
なんとなくこんな感じかな。
- ユーザー一覧表示して、ユーザー一覧が表示されることを確認する。
- ユーザー一覧の参照リンクをクリックしてすると、新しいタブが表示され、参照リンクをクリックしたユーザーの情報が表示されることを確認する。
- 新しいタブを閉じて、ユーザー一覧に戻ると、ユーザー一覧が表示されていることを確認する。
ソース
ユーザー参照リンクのHTML
<a href="{{ route('user.show', ['u_id' => $uId]) }}" target="_brank" dusk="link_{{ $uId }}">参照</a>
Duskテストのソース
$browser->visit(route('user.index'));
$browser->click('@link_' . $uId); // ユーザー参照リンクをクリック
// ユーザー参照タブに移動する。
$window = collect($browser->driver->getWindowHandles())->last();
$browser->driver->switchTo()->window($window);
$browser->assertSee('ユーザー参照');
$browser->driver->close(); // ウィンドウ(カレントタブ)を閉じる
// ユーザー一覧タブへ戻る
$window = collect($browser->driver->getWindowHandles())->last();
$browser->driver->switchTo()->window($window);
$browser->assertSee('ユーザー一覧');
これで実行すれば、大丈夫!
まとめ
タブ移動の3行はどこかに共通化するのも良し。むしろ共通化すべき。
タブ(ウィンドウ)を開いてのテストってそれほどないかもだけど、そういうテストも大事!!
コメント