RSpec
Capybara

RSpecのsleep処理について

More than 3 years have passed since last update.

RSpecのテスト内容を見てみるとsleepが大量に使っている場合があります。

これがどうにかならないのか色々と調べてみた。


どういう時にsleepが使われているか?

使用目的としては画面遷移が完了するまでの待機やAjaxなどjavascriptの処理を待つに使われるのがほとんどの模様


対策

遷移後の画面にあるべき要素を検索する(find)という処理を入れる。

findは要素が見つかるまで(default_wait_timeの間)ループ処理が入るため、sleepを使うよりスマートと思われる。

他にもhas_◯◯(has_xpath,has_cssなど)でもfindと同じようにループ処理が入る。

findとは挙動が違い、Ajaxの後にsleepを用いている際にはhas_◯◯を使うべきである。

https://github.com/jnicklas/capybara#asynchronous-javascript-ajax-and-friends

2015/07/03 10:18 追記:

have_xxxでも以下のようにexpectを用いる場合にはループ処理が入る。


test_spec.rb

expect(page).to have_xxx "Foo bar"



まとめ

日本語の情報のほとんどがsleepやwaitを使えといった書き方をしているが、そんなことはない。