capybaraを2.1にupgradeしてテンパった方へ
以下を入れておけば、心に平穏が戻るかもしれない。
spec_helper.rb
Capybara.configure do |config| config.match = :one config.exact_options = false config.ignore_hidden_elements = false config.visible_text_only = true end
https://github.com/jnicklas/capybara/blob/master/History.md
http://www.elabs.se/blog/60-introducing-capybara-2-1
2系からゆるかったチェック基準を厳しくしたけど1.xから2.0にしたときに、いろんな人から「このアップデート無理ゲー」って言われたから2.1では後方互換性を保つためのオプションをたくさん用意したよ、的なことらしい。
今回ぼくは2.0→2.1のアップデートだったけど、それでもそれなりにテストひっかかったけど。
そのうち対応しよう。。
追記)
上述のconfigがないとき、一番壊れたテストがtitleタグの内容チェックだった。
なぜかというとconfig.ignore_hidden_elementsのデフォルトがtrueに変わったからで、config.ignore_hidden_elementsがなんなのかというと、その名の通り「人の目に見えない要素は評価しない」という意味で、こいつがtrueになると、display: none だったりhidden値だったりtitleなんかも拾われなくなって、チェックが通らなくなる、という按配らしい。titleタグ、ブラウザのバーとかタブとかに見えてるじゃん!って思ったけど、そういうことじゃないみたい。
で、titleチェックについては、
page.title # => "The title" page.has_title?("The title") # => true page.should have_title("The title")
といった書き方があり、具体的には
its(:source) { should have_selector('title', text: full_title(I18n.t('edit.title'))) }
みたいなテストは
it{ expect(page.source).to have_title(full_title(I18n.t('edit.title'))) }
と書きなおせばテストは通るようになる。※ついでにshouldをexpectに書き換えている:http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax