RSpecでE2Eテスト(system spec)を書いていて、labelのクリックがうまくいかなかったときの対応。
まずはバッドケース。タグはこんな感じ。
<label for='good-check'>
<input type='checkbox' id='good-check' />
ここをチェック
</label>これをrspecの以下のテストコードだとうまくチェック状態にすることができなかった。
check('ここをチェック')
とか
find("good-check").click
でもダメ結論、テスト用にspanタグを忍ばせることにした。
本来はテストの目的でタグを増やしたくはないけれど、背に腹は変えられない。
<label for='good-check'>
<input type='checkbox' id='good-check' />
<span class="check-text">ここをチェック</span>
</label>あとは、xpathで設定すればOK。これで動いた。RSpecは環境やコーディングの仕方によって、大分挙動が不安定になる。
内部的にはブラウザが立ち上がって、動作しているのだから、大変なことをしているわけでそりゃそうかという気もする。
find(:xpath, "//span[@class='check-text']").click