1 of 14

take a glance at capybara 2.0

2012-07-18 @okitan

2 of 14

自己紹介

describe Okitan do

its(:age) { should == 31 }

it "works in DeNA" do

should write(:perl) #=> fail

end

end

3 of 14

2.0.0.beta2が出た

capybara

を少し触って

みました

4 of 14

capybara-2.0.0.beta2

  • major version upです
  • 安易にバージョンアップするとテストが落ちるようになるかもしれません
  • 注意すべき変更点を説明します

5 of 14

Capybara::Node::Finders#find

  • 多分一番テストを壊します

  • Before
    • 複数要素を見つけたら最初を返す

  • After
    • 複数要素を見つけたら例外!!!

6 of 14

( Д ) ゚ ゚

7 of 14

お前はいままで書いたfindの数を

おぼえているのか?

  • そして毎回 locator に該当するものが複数ないかを確認してきました?

  • 逆にいえば capybara-2.0 を使って書き始めれば,複数ないことが保障され曖昧性が排除されますよね

8 of 14

find の愉快な仲間たち

  • find_link find_field
  • click_button fill_in
  • 要は action 系すべて例外投げます

  • has_button? have_link? とか matcher 系は大丈夫です

9 of 14

Capybara::Driver::Finders#all

  • find の中で利用されている all

  • Before
    • 単なる要素の Array を返す
  • After
    • Capybara::Result

10 of 14

Capybara::Result

  • 一応 Enumerable なので
    • find とかは普通に使えます

  • Capybara::Result#find! が find で複数見つかると例外になる原因です

11 of 14

その他こまいところ

  • Capybara::Driver::Base#body
    • sourceと同じ挙動になりました
    • page.body と書いていた人は注意
  • Capybara::Session#wait_until

Capybara#timeout

    • 無くなりました
    • つ synchronize

12 of 14

driver に影響するかもしれないところ

  • driver 用のテストが細かくなった

  • Before
    • lib/capybara/spec/driver.rb
  • After
    • lib/capybara/spec/session/*_spec.rb

メソッド単位に細かくなったのはいいが,

capybara2以前と以降に両方対応するのが困難

13 of 14

driver に影響するかもしれないところ

  • Capybara::Server#url
    • 無くなりました
    • path を url に変換してくれた

  • Capybara::Driver::Base#needs_server?
    • 追加されました
    • app を立ち上げたい場合 true

ここらへんは History.txt にもないです

14 of 14

まとめ

  • find の変更は影響大
    • ただテストが厳密にはなるので

  • その他の変更はほぼ問題ない
    • capybara を変に hack しているとダメージでかいです

  • driver の作者は頑張ってください