rails tokyo 035 cucumber

31
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

Upload: kyosuke-morohashi

Post on 19-Jan-2015

2.097 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Rails Tokyo 035 Cucumber

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

Page 2: Rails Tokyo 035 Cucumber

諸橋恭介

✓Rails勉強会@東京の案内係をしています。

✓ここ2年ほどRubyやRailsのプロジェクトで仕事してます。

✓http://ruby.agile.esm.co.jp/

http://d.hatena.ne.jp/moro/

Page 3: Rails Tokyo 035 Cucumber

本を書きました

http://amazon.jp/gp/product/4797336625

いっぱい売れるとCucumberの事を追加した第2版が出るかも

Page 4: Rails Tokyo 035 Cucumber
Page 5: Rails Tokyo 035 Cucumber

Cucumber

Page 6: Rails Tokyo 035 Cucumber

What?

Page 7: Rails Tokyo 035 Cucumber

What?

✓"Cucumber executes plain text documentation of code against that code." from README

✓Cucumberはプレーンテキストドキュメントに対応するコードを実行する(ためのアプリケーションです)

✓お客様と一緒に受け入れテスト(Acceptance Test)を書ける

Page 8: Rails Tokyo 035 Cucumber

Plain TextFeature: 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"

Page 9: Rails Tokyo 035 Cucumber

プレーンテキストシナリオ: 新しいエントリの登録 前提 新規エントリページを表示している

もし "タイトル"に"Cucumberスゴイ"と入力する かつ "本文"に"これSugeeeeeeee"と入力する かつ "Create"ボタンを押す

ならば "これSugeeeeeeee"と表示されていること

Page 10: Rails Tokyo 035 Cucumber

mechanism

Page 11: Rails Tokyo 035 Cucumber

プリプロセッサ、みたいな

✓プレーンテキストの内容を一行ずつ解析

✓構造や予約語に対応する文を抜き出す

✓それぞれの文に対応するコードを探す

✓で、対応するコードを実行する

Page 12: Rails Tokyo 035 Cucumber

Cucumberで実行できるfeature

フィーチャ: エントリを管理する エントリを管理していくため エントリの担当者として エントリの追加削除などの管理ができるようにしたい

シナリオ: 新しいエントリの登録 前提 新規エントリページを表示している かつ "Create"ボタンを押す

Page 13: Rails Tokyo 035 Cucumber

構造や予約語に対応する文を抜き出す

✓Feature, Scenario, Given, And ...✓フィーチャ, シナリオ, 前提, かつ ...

✓実は既に日本語が使えます 角谷++

Page 14: Rails Tokyo 035 Cucumber

それぞれの文に対応するコードを探す

✓実際のコード部分をstepと呼ぶ

✓対応するstepはプログラマが書くよ

Page 15: Rails Tokyo 035 Cucumber

step_definitions

Page 16: Rails Tokyo 035 Cucumber

テキストに対応するコード

Given I am on the new entry page

Given /I am on the new entry page/ do visits "/entries/new"end

feature

step

Page 17: Rails Tokyo 035 Cucumber

すごく、正規表現です

✓シンプルすぎるマッチングルール

✓いわゆる「日本語プログラミング」じゃない

✓後方参照を使ってパラメータ指定できる

Page 18: Rails Tokyo 035 Cucumber

後方参照でパラメータ指定

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 endend

Given there are 4 entries

Page 19: Rails Tokyo 035 Cucumber

書くのが面倒???

✓後方参照でのパラメータ指定を使えばけっこう事足りる

✓パラメータを変えるだけなら、表でも指定できる

✓Webアプリ特有の面倒さ

Page 20: Rails Tokyo 035 Cucumber

Webアプリの面倒さ✓アクセスするURLを手で作る?

✓get "/entries/1"✓入力項目のname属性の指定とか

✓post "/entries", :entry => {:title => "hoge"}✓post "/entries", "entry[title]=hoge"

Page 21: Rails Tokyo 035 Cucumber

WebratRuby Acceptance Testing for

Web applications

Page 22: Rails Tokyo 035 Cucumber

Webアプリを外から操作するDSLセット

✓リンクを辿れる

✓clicks_link(link)

✓ボタンを押せる

✓clicks_button(button)

✓フォームに入力できる

✓fills_in(field, :with => value)

Page 23: Rails Tokyo 035 Cucumber

Cucumberからも使える

When /^I follow "(.*)"$/ do ¦link¦ clicks_link(link)end

Given I follow "Next"

✓Webratを使ったstep_definitionはCucumberに同梱されてる

Page 24: Rails Tokyo 035 Cucumber

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¦

Page 25: Rails Tokyo 035 Cucumber

日本語もOK (正規表現だし)

When / "̂(.*)"ボタンをクリックする$/ do ¦button¦ clicks_button(button) visit request.request_uriend

“Next”ボタンをクリックする

Page 26: Rails Tokyo 035 Cucumber

ラベルを使って入力できる

✓"(.*)"に"(.*)"と入力する が

✓"input#entry_title"に"Cucumberがアツイ"と入力する ではなく

✓"entry[title]"に"Cucumberがアツイ"と入力する でもなく

✓"タイトル"に"Cucumberがアツイ"と入力する と書ける

Page 27: Rails Tokyo 035 Cucumber

リンクもアンカーテキストで書ける!!

✓"(.*)"リンクをクリックする が

✓"a[@href=/entries]"リンクをクリックする ではなく

✓"エントリの一覧"リンクをクリックする と書ける

Page 28: Rails Tokyo 035 Cucumber

Conclusion

Page 29: Rails Tokyo 035 Cucumber

これが動作するコードになる

シナリオ: 新しいエントリの登録 前提 新規エントリページを表示している

もし "タイトル"に"Cucumberスゴイ"と入力する かつ "本文"に"これSugeeeeeeee"と入力する かつ "Create"ボタンを押す

ならば "これSugeeeeeeee"と表示されていること

Page 30: Rails Tokyo 035 Cucumber

本を書きました

http://amazon.jp/gp/product/4797336625

いっぱい売れるとCucumberの事を追加した第2版が出るかも

Page 31: Rails Tokyo 035 Cucumber

ご清聴ありがとうございました