Diary

@ssig33

03 Dec 2019 Tue 10:19

Rails の system test case でブラウザリロードのテスト

そういうことをしたくなることもあると思います。一般的には minitest より rspec を使ってる人が多いような気はしますがそのあたりは適当に読み替えてください(今は rspec も system test case 使えるんだっけ?よく知らない)。

Capybara には evaluate_script というものがあり、ブラウザには performanceNavigation.type(MDN) というものがあります。

というわけですっごい雑ですが以下のような感じでリロードの仕様に関するテストが書けます。

以下のようなページがあるとして

<h1>todesking</1>
<button class="todesprincess" onClick={()=> location.reload()}>リロード</button>
test "button を押すとブラウザがリロードされる" do
  visit "/todesking"
  assert_selector "button.todesprincess", count: 1
  
  assert_equal 0, page.evaluate_script("performance.navigation.type")

  
  find("button.todesprincess").click()
  
  reloaded = false
  100.times do
    reloaded = 1 == page.evaluate_script("performance.navigation.type")
    break if reloaded
    sleep 0.1
  end
  assert reloaded
end

こんなかんじ。これでとりあえずボタン押したら 10 秒以内にはリロードされるということがテストできます。なんかもうちょっとがんばればループとか使わずにテスト出来そうな予感はありますがとりあえずこれで最低限はいける