Request Spec, Steakで使う Capybara DSL の情報、サンプル

先日リリースした 萌えトーク ではEnd-to-Endテストには Request Spec を使っていますが、テスト(RSpec)を書くには Capybara DSL (API) の知識が必要になります。 萌えトーク の Request Spec を書く際に参照した情報、サンプルをまとめておきます。

http://upload.wikimedia.org/wikipedia/commons/thumb/d/de/Capybara_Hattiesburg_Zoo_%2870909b-42%29_2560x1600.jpg/800px-Capybara_Hattiesburg_Zoo_%2870909b-42%29_2560x1600.jpg

Capybara DSL 情報

  • Capybara本家 中程からの The DSL に基本的な使い方の例が並んでいますので、Capybara を使う際にはまずここを読みましょう
  • Module: Capybara CapybaraのRDocです、DSLには有用なオプションが用意されてます、そのオプションが解ります。 ただし、慣れないと調べづらいかもしれません。

サンプル

萌えトーク の Request Spec で使ったコードのサンプルを書きます。必ずしも最適ではないものもあるかも知れません、適切でないものがあったらご指摘下さい。

page.should have_content "一覧"

一番 良く使うページ内に指定した文字があることを検証

page.find("table.attendances tr:eq(2) td:eq(2)").text.should =~ /山さん.*川さん/

テーブルの特定のカラム内の文字列を検証

page.all("table.db_list tr:eq(2) td")[1..2].map{|e| e.text}.should == ["10,000", "2011-01-20"]

テーブルの複数のカラム内の文字列を検証

within "table.db_list tr:eq(5)" do click_link "入金" end

テーブルの特定の行にあるリンクをクリック

find("div.op_buttons a:eq(3)").click

指定した div 内のリンクを左からの個数(順番)で指定して、クリック。
本来はリンクにidを付けておいた方が良いと思います。

find("a", :text => "吉田").click

リンクの文字列を指定して、クリック

page.should have_css("div.char_detail img", :alt => "No19")

画像のalt属性を指定して検証。 このように CSSセレクターだけではなく、タグの持つ属性なども指定できます。