リア充爆発日記

You don't even know what ria-ju really is.

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