Request Spec, Steakで使う Capybara DSL の情報、サンプル
先日リリースした 萌えトーク ではEnd-to-Endテストには Request Spec を使っていますが、テスト(RSpec)を書くには Capybara DSL (API) の知識が必要になります。 萌えトーク の Request Spec を書く際に参照した情報、サンプルをまとめておきます。
Capybara DSL 情報
- Capybara本家 中程からの The DSL に基本的な使い方の例が並んでいますので、Capybara を使う際にはまずここを読みましょう
- Richard Conroy's Personal Blog: Capybara Reference DSL一覧がまとまとめられていて、コードを書くのに便利です。
- 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")