Rails Tokyo 035 Cucumber

2,327 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,393
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
24
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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. ご清聴 ありがとう ございました

×