SinatraでCapybara使う
今取り組んでいるSinatraによるプロジェクトも佳境を迎え、納品に向けて受け入れに近いレベルのテストを書いています。
まぁ本格的な受け入れテストではないんですが、返却されたviewが正しい値を含んでいるかのテストを中心とするわけですが、そのうえでCapybaraが提供するいくつかのMatcherが欲しかったのです。そのMatcherとはhas_css。
これはこのように使います。
get '/' last_response.body.should have_css("#game_result")
これの何が便利かというと、idの場合はわかりにくいですが例えば
last_response.body.should have_css(".game_user", count: 3)
とかすると、game_userが3人含まれていることがわかります。have_cssのcountオプションは超強力です。
で、これを使いたかったんで他のvisitとかfill_inとかたぶん要らないんだけど、ひとまずSinatraのテスト環境にCapybaraを入れたい、と思ったが入らない!!
なんか
page.should have_css("#game_result")とかするとundefined method 'has_css?'とか言われるんですね。いや、俺が呼んだのはhave_cssだろ、みたいな。
でまぁ、以下の設定が必要でした。
◯spec/spec_helper.rb
require 'capybara'
require 'capybara/dsl'
require 'capybara/rspec'
RSpec.configure do |config|
config.include Rack::Test::Methods
config.include Capybara::DSL
config.include Capybara::RSpecMatchers
end
で、いろいろな記事見てもなぜか'capybara/rspec'をrequireするのとCapybara::RSpecMatchersをincludeするのは書いてないんだよね。。。あれ本当に動いてるのかな?
まぁ言われれば、そりゃMatcherのモジュールインクルードしないといけないのは当たり前なんだけど。ちなみにMatcherがhave_cssとかの拡張で、DSLがvisitとかだっていう認識でいいでしょうかね。