Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Rails Tokyo 035 Cucumber

2,641 views

Published on

  • Be the first to comment

Rails Tokyo 035 Cucumber

  1. 1. Cucumberがアツい and Webratがスゴい 2008-11-29 Rails勉強会@東京#35 w/ 楽天テクノロジーカンファレンス2008 (株)永和システムマネジメント 諸橋恭介 this photo is by Muu-karhu, http://commons.wikimedia.org/wiki/Image:Kurkkuja.jpg This file is licensed under CC BY-SA
  2. 2. 諸橋恭介 Rails勉強会@東京の案内係をして います。 ここ2年ほどRubyやRailsのプロ ジェクトで仕事してます。 ✓http://ruby.agile.esm.co.jp/ http://d.hatena.ne.jp/moro/
  3. 3. 本を書きました http://amazon.jp/gp/product/4797336625 いっぱい売れると Cucumberの事を追加 した第2版が出るかも
  4. 4. Cucumber
  5. 5. What?
  6. 6. What? ✓"Cucumber executes plain text documentation of code against that code." from README Cucumberはプレーンテキストドキュメントに対応する コードを実行する(ためのアプリケーションです) ✓お客様と一緒に受け入れテスト (Acceptance Test)を書ける
  7. 7. Plain Text Feature: Manage entries In order to keep track of entries A entry mechanic Should be able to manage several entries Scenario: Register new entry Given I am on the new entry page And I press "Create"
  8. 8. プレーンテキスト シナリオ: 新しいエントリの登録 前提 新規エントリページを表示している もし "タイトル"に"Cucumberスゴイ"と入力する かつ "本文"に"これSugeeeeeeee"と入力する かつ "Create"ボタンを押す ならば "これSugeeeeeeee"と表示されていること
  9. 9. mechanism
  10. 10. プリプロセッサ、みたいな プレーンテキストの内容を一行ずつ解析 構造や予約語に対応する文を抜き出す それぞれの文に対応するコードを探す で、対応するコードを実行する
  11. 11. Cucumberで実行できるfeature フィーチャ: エントリを管理する エントリを管理していくため エントリの担当者として エントリの追加削除などの管理ができるようにしたい シナリオ: 新しいエントリの登録 前提 新規エントリページを表示している かつ "Create"ボタンを押す
  12. 12. 構造や予約語に対応する 文を抜き出す Feature, Scenario, Given, And ... フィーチャ, シナリオ, 前提, かつ ... 実は既に日本語が使えます 角谷++
  13. 13. それぞれの文に対応する コードを探す 実際のコード部分をstep と呼ぶ 対応するstepはプログラ マが書くよ
  14. 14. step_definitions
  15. 15. テキストに対応するコード Given I am on the new entry page Given /I am on the new entry page/ do visits "/entries/new" end feature step
  16. 16. すごく、正規表現です シンプルすぎるマッチングルール いわゆる「日本語プログラミング」じゃない 後方参照を使ってパラメータ指定できる
  17. 17. 後方参照でパラメータ指定 Given /there are (d+) entries/ do |n| Entry.transaction do Entry.destroy_all n.to_i.times do |n| Entry.create! :name => "Entry #{n}" end end end Given there are 4 entries
  18. 18. 書くのが面倒??? 後方参照でのパラメータ指定を使えば けっこう事足りる パラメータを変えるだけなら、表でも指定できる Webアプリ特有の面倒さ
  19. 19. Webアプリの面倒さ アクセスするURLを手で作る? ✓get "/entries/1" 入力項目のname属性の指定とか ✓post "/entries", :entry => {:title => "hoge"} ✓post "/entries", "entry[title]=hoge"
  20. 20. Webrat Ruby Acceptance Testing for Web applications
  21. 21. Webアプリを外から操作する DSLセット リンクを辿れる clicks_link(link) ボタンを押せる clicks_button(button) フォームに入力できる ✓fills_in(field, :with => value)
  22. 22. Cucumberからも使える When /^I follow "(.*)"$/ do |link| clicks_link(link) end Given I follow "Next" Webratを使ったstep_definitionは Cucumberに同梱されてる
  23. 23. When /^"(.*)"ボタンをクリックする$/ do |button| When /^"(.*)"リンクをクリックする$/ do |link| When /^"(.*)"に"(.*)"と入力する$/ do |field, value| When /^"(.*)"から"(.*)"を選択$/ do |field, value| When /^"(.*)"をチェックする$/ do |field| When /^"(.*)"のチェックを外す$/ do |field| When /^"(.*)"を選択する$/ do |field| When /^"(.*)"としてをファイル"(.*)"を添付する$/ do | field, path|
  24. 24. 日本語もOK (正規表現だし) When /^"(.*)"ボタンをクリックする$/ do |button| clicks_button(button) visit request.request_uri end Next ボタンをクリックする
  25. 25. ラベルを使って入力できる "(.*)"に"(.*)"と入力する が "input#entry_title"に"Cucumberがアツ イ"と入力する ではなく "entry[title]"に"Cucumberがアツイ"と入力 する でもなく "タイトル"に"Cucumberがアツイ"と入力する と書ける
  26. 26. リンクも アンカーテキストで書ける!! "(.*)"リンクをクリックする が "a[@href=/entries]"リンクをクリックする ではなく "エントリの一覧"リンクをクリックする と書ける
  27. 27. Conclusion
  28. 28. これが動作するコードになる シナリオ: 新しいエントリの登録 前提 新規エントリページを表示している もし "タイトル"に"Cucumberスゴイ"と入力する かつ "本文"に"これSugeeeeeeee"と入力する かつ "Create"ボタンを押す ならば "これSugeeeeeeee"と表示されていること
  29. 29. 本を書きました http://amazon.jp/gp/product/4797336625 いっぱい売れると Cucumberの事を追加 した第2版が出るかも
  30. 30. ご清聴 ありがとう ございました

×