Rails3+RSpecでのテストを勉強してみる (3) - capybara-webkitを使ってみる -

2012-09-08T00:00:00+00:00 rspec Ruby Rails

capybara-webkitを使ってJavaScriptの機能をテスト出来る模様なので色々調べつつやってみた

app/views/sample/index.html.erb

<%= link_to_function "click", "$(this).html("test")" %>

<div id="container">
  <%= link_to_function "click", "$(this).html("test")" %>
</div>

なぜ同じのを2つつけてるのかっていうのは後ほど

capybara-webkitのセットアップ

事前にQtを入れておく。Ubuntuの場合はlibqt4-devとlibqtwebkit-dev、以外の環境は https://github.com/thoughtbot/capybara-webkit/wiki/Installing-Qt-and-compiling-capybara-webkit を参照

んでspec/spec_helper.rbに

require "capybara/rails"
require "capybara/rspec"

Capybara.javascript_driver = :webkit

な感じで設定しておく、又、Gemfileにcapybara-webkitとか指定しておく
。後はRSpecなテストを書くだけなのだけど、Capybaraによるとspec/requests、又はspec/integrationに置く模様

spec/integration/sample_javascript_spec.rb

require "spec_helper"

describe "JavaScript test", :js => true do
  it "requests GET /sample enable javascript" do
    visit "/sample"

    within("#container") do
      click_link "click"

      find("a").text.should == "test"
    end
  end
end

で上記で同じ内容のリンクを2つつけた場合にある特定の要素内に含まれる特定のリンクなどに特定したい場合にはwithin等で特定出来る模様。この場合に出力するとpage.body

<!DOCTYPE html>
<html>
  <head>
    <title>Sample</title>
    <link href="/assets/application.css" media="all" rel="stylesheet" type="text/css">
    <script src="/assets/application.js" type="text/javascript"></script>
  </head>
  <body>
    <a href="#" onclick="$(this).html("test"); return false;">click</a>

    <div id="container">
      <a href="#" onclick="$(this).html("test"); return false;">test</a>
    </div>
  </body>
</html>

というようになっている模様。んまぁてな感じでJavaScriptを含む機能のテスト等もさくっと行えるみたいっすね。ちなみにチートシートっぽいのもある模様 https://gist.github.com/428105

Rails3+RSpecでのテストを勉強してみる (4) - コントローラー及びヘルパーのテスト - Rails3+RSpecでのテストを勉強してみる (2) - RSpecでのコードカバレッジ -