rails tokyo 035 cucumber

Post on 19-Jan-2015

2.097 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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