sinatraでテストの入門の入門(その3)sinatraでcapybara
以前書いたものの続きです。
rspecと同様ほとんど変りはありません。と言ったら違うか。。
サンプルコード
require './hello_world' require 'capybara' require 'capybara/dsl' require 'test/unit' class HelloWorldTest < Test::Unit::TestCase include Capybara::DSL # Capybara.default_driver = :selenium def setup Capybara.app = Sinatra::Application.new end def test_it_works visit '/' assert page.has_content?('Hello World') end end
コードの理解
capybaraを使う場合は
- capybara
- capybara/dsl
をrequireする必要があります。
元のページではインクルードするのはCapybaraモジュールでしたが、テストを動かすと「CapybaraでなくCapybara::DSLをインクルードしなさい」と警告が出るので直しています。
後はcapybaraっぽく書けば出来そうですね。
ドライバーを変えるには
capybaraの得意技の一つであるブラウザドライバの変更ですが、サンプルコードでコメントになっている部分
Capybara.default_driver = :selenium
のように指定すればよいです。
がしかし!
Failures: 1) The HelloWorld App works Failure/Error: visit '/' Selenium::WebDriver::Error::WebDriverError: unable to obtain stable firefox connection in 60 seconds (127.0.0.1:7055) # ./hello_by_capybara_spec.rb:20:in `block (2 levels) in <top (required)>' Finished in 73.62 seconds 1 example, 1 failure Failed examples: rspec ./hello_by_capybara_spec.rb:19 # The HelloWorld App works
となってブラウザが動かなくなってる。。。どうしたものかー。下書きした時はうまく動いたのになー
と悩んでいるうちにcapyabaraのissueで議論されていました。
https://github.com/jnicklas/capybara/pull/460です。
ようするにcapybara1.0.0で依存指定するselenium-webdriverのバージョンが古かったようです。
selenium-webdriverって最新だと2.5なんだけど、capybaraでは0.2を指定していたという。。
他の要件でselenium-webdriver入れてたら、こんなこと起らんもんなぁ。。
capybara1.0.1にするとselenium-webdriverが新しいバージョンが入るので解決出来ます。
rspecでは?
こんな感じでした。
require './hello_world' require 'capybara' require 'capybara/dsl' require 'rspec' describe 'The HelloWorld App' do include Capybara::DSL # Capybara.default_driver = :selenium before do Capybara.app = Sinatra::Application.new end it 'works' do visit '/' page.should be_has_content('Hello World') end end