rails tokyo 035 cucumber
Post on 19-Jan-2015
2.097 Views
Preview:
DESCRIPTION
TRANSCRIPT
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
諸橋恭介
✓Rails勉強会@東京の案内係をしています。
✓ここ2年ほどRubyやRailsのプロジェクトで仕事してます。
✓http://ruby.agile.esm.co.jp/
http://d.hatena.ne.jp/moro/
本を書きました
http://amazon.jp/gp/product/4797336625
いっぱい売れるとCucumberの事を追加した第2版が出るかも
Cucumber
What?
What?
✓"Cucumber executes plain text documentation of code against that code." from README
✓Cucumberはプレーンテキストドキュメントに対応するコードを実行する(ためのアプリケーションです)
✓お客様と一緒に受け入れテスト(Acceptance Test)を書ける
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"
プレーンテキストシナリオ: 新しいエントリの登録 前提 新規エントリページを表示している
もし "タイトル"に"Cucumberスゴイ"と入力する かつ "本文"に"これSugeeeeeeee"と入力する かつ "Create"ボタンを押す
ならば "これSugeeeeeeee"と表示されていること
mechanism
プリプロセッサ、みたいな
✓プレーンテキストの内容を一行ずつ解析
✓構造や予約語に対応する文を抜き出す
✓それぞれの文に対応するコードを探す
✓で、対応するコードを実行する
Cucumberで実行できるfeature
フィーチャ: エントリを管理する エントリを管理していくため エントリの担当者として エントリの追加削除などの管理ができるようにしたい
シナリオ: 新しいエントリの登録 前提 新規エントリページを表示している かつ "Create"ボタンを押す
構造や予約語に対応する文を抜き出す
✓Feature, Scenario, Given, And ...✓フィーチャ, シナリオ, 前提, かつ ...
✓実は既に日本語が使えます 角谷++
それぞれの文に対応するコードを探す
✓実際のコード部分をstepと呼ぶ
✓対応するstepはプログラマが書くよ
step_definitions
テキストに対応するコード
Given I am on the new entry page
Given /I am on the new entry page/ do visits "/entries/new"end
feature
step
すごく、正規表現です
✓シンプルすぎるマッチングルール
✓いわゆる「日本語プログラミング」じゃない
✓後方参照を使ってパラメータ指定できる
後方参照でパラメータ指定
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
書くのが面倒???
✓後方参照でのパラメータ指定を使えばけっこう事足りる
✓パラメータを変えるだけなら、表でも指定できる
✓Webアプリ特有の面倒さ
Webアプリの面倒さ✓アクセスするURLを手で作る?
✓get "/entries/1"✓入力項目のname属性の指定とか
✓post "/entries", :entry => {:title => "hoge"}✓post "/entries", "entry[title]=hoge"
WebratRuby Acceptance Testing for
Web applications
Webアプリを外から操作するDSLセット
✓リンクを辿れる
✓clicks_link(link)
✓ボタンを押せる
✓clicks_button(button)
✓フォームに入力できる
✓fills_in(field, :with => value)
Cucumberからも使える
When /^I follow "(.*)"$/ do ¦link¦ clicks_link(link)end
Given I follow "Next"
✓Webratを使ったstep_definitionは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¦
日本語もOK (正規表現だし)
When / "̂(.*)"ボタンをクリックする$/ do ¦button¦ clicks_button(button) visit request.request_uriend
“Next”ボタンをクリックする
ラベルを使って入力できる
✓"(.*)"に"(.*)"と入力する が
✓"input#entry_title"に"Cucumberがアツイ"と入力する ではなく
✓"entry[title]"に"Cucumberがアツイ"と入力する でもなく
✓"タイトル"に"Cucumberがアツイ"と入力する と書ける
リンクもアンカーテキストで書ける!!
✓"(.*)"リンクをクリックする が
✓"a[@href=/entries]"リンクをクリックする ではなく
✓"エントリの一覧"リンクをクリックする と書ける
Conclusion
これが動作するコードになる
シナリオ: 新しいエントリの登録 前提 新規エントリページを表示している
もし "タイトル"に"Cucumberスゴイ"と入力する かつ "本文"に"これSugeeeeeeee"と入力する かつ "Create"ボタンを押す
ならば "これSugeeeeeeee"と表示されていること
本を書きました
http://amazon.jp/gp/product/4797336625
いっぱい売れるとCucumberの事を追加した第2版が出るかも
ご清聴ありがとうございました
top related