SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
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 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"
プレーンテキスト
シナリオ: 新しいエントリの登録
前提 新規エントリページを表示している
もし "タイトル"に"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
end
end
Given there are 4 entries
書くのが面倒???
後方参照でのパラメータ指定を使えば
けっこう事足りる
パラメータを変えるだけなら、表でも指定できる
Webアプリ特有の面倒さ
Webアプリの面倒さ
アクセスするURLを手で作る?
✓get "/entries/1"
入力項目のname属性の指定とか
✓post "/entries", :entry => {:title => "hoge"}
✓post "/entries", "entry[title]=hoge"
Webrat
Ruby 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_uri
end
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版が出るかも
ご清聴
ありがとう
ございました

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

JJUG CCC 20150411 grails3 Spring-boot
JJUG CCC 20150411 grails3 Spring-bootJJUG CCC 20150411 grails3 Spring-boot
JJUG CCC 20150411 grails3 Spring-boot
 
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013
 
会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話
 
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
 
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App InventorHands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App Inventor
 
GitとCIとかチャットとかをオンプレで運用する話
GitとCIとかチャットとかをオンプレで運用する話GitとCIとかチャットとかをオンプレで運用する話
GitとCIとかチャットとかをオンプレで運用する話
 
Clojureでガラケーサイトを作る際の細かい話
Clojureでガラケーサイトを作る際の細かい話Clojureでガラケーサイトを作る際の細かい話
Clojureでガラケーサイトを作る際の細かい話
 
SwaggerとAPIのデザイン
SwaggerとAPIのデザインSwaggerとAPIのデザイン
SwaggerとAPIのデザイン
 
rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法
 
G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
 
//Build 2021 FASTER 紹介
//Build 2021 FASTER 紹介//Build 2021 FASTER 紹介
//Build 2021 FASTER 紹介
 
マイクロサービスにおける 非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャ
 
WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...
WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...
WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...
 
//build 2021 bicep 0.4
//build 2021 bicep 0.4//build 2021 bicep 0.4
//build 2021 bicep 0.4
 
Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!
 
Editorlt
EditorltEditorlt
Editorlt
 
マイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tyeマイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tye
 
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎
 
only ip whitelist at cloudfront is ok?
only ip whitelist at cloudfront is ok?only ip whitelist at cloudfront is ok?
only ip whitelist at cloudfront is ok?
 
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
 

Destaque (6)

そうだ勉強会に行こう
そうだ勉強会に行こうそうだ勉強会に行こう
そうだ勉強会に行こう
 
Capistrano in practice - WebCareer
Capistrano in practice - WebCareerCapistrano in practice - WebCareer
Capistrano in practice - WebCareer
 
SWID Tag Creation Tool
SWID Tag Creation Tool SWID Tag Creation Tool
SWID Tag Creation Tool
 
Rails <form> Chronicle
Rails <form> ChronicleRails <form> Chronicle
Rails <form> Chronicle
 
OSC2008 勉強会大集合 Rails勉強会@東京
OSC2008 勉強会大集合 Rails勉強会@東京OSC2008 勉強会大集合 Rails勉強会@東京
OSC2008 勉強会大集合 Rails勉強会@東京
 
Test Context Arrangement Recipebook
Test Context Arrangement RecipebookTest Context Arrangement Recipebook
Test Context Arrangement Recipebook
 

Semelhante a Rails Tokyo 035 Cucumber

Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And Jekyll
Yoji Shidara
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
Takayuki Shimizukawa
 
Iron rubyとsinatraで作るデスクトップアプリ
Iron rubyとsinatraで作るデスクトップアプリIron rubyとsinatraで作るデスクトップアプリ
Iron rubyとsinatraで作るデスクトップアプリ
Yamamoto Kazuhisa
 

Semelhante a Rails Tokyo 035 Cucumber (20)

普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見
 
Application Bootstrap
Application BootstrapApplication Bootstrap
Application Bootstrap
 
Cloud native & cloud design patterns for small teams - ハッカーズチャンプルー2018
Cloud native & cloud design patterns for  small teams - ハッカーズチャンプルー2018Cloud native & cloud design patterns for  small teams - ハッカーズチャンプルー2018
Cloud native & cloud design patterns for small teams - ハッカーズチャンプルー2018
 
Ruby way-openstack.keynote
Ruby way-openstack.keynoteRuby way-openstack.keynote
Ruby way-openstack.keynote
 
アカツキはどのようにAWSを活用しているか #jawsug
アカツキはどのようにAWSを活用しているか #jawsugアカツキはどのようにAWSを活用しているか #jawsug
アカツキはどのようにAWSを活用しているか #jawsug
 
Running Kubernetes on Azure
Running Kubernetes on AzureRunning Kubernetes on Azure
Running Kubernetes on Azure
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And Jekyll
 
大規模Webを支えるAgileな技術
大規模Webを支えるAgileな技術大規模Webを支えるAgileな技術
大規模Webを支えるAgileな技術
 
自動構築と自動テスト〜インフラのコード化とクラウドの優位性
自動構築と自動テスト〜インフラのコード化とクラウドの優位性自動構築と自動テスト〜インフラのコード化とクラウドの優位性
自動構築と自動テスト〜インフラのコード化とクラウドの優位性
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 
minneで学ぶクラウド脳
minneで学ぶクラウド脳minneで学ぶクラウド脳
minneで学ぶクラウド脳
 
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...
 
RubyでGitHubをもうちょっと便利にする
RubyでGitHubをもうちょっと便利にするRubyでGitHubをもうちょっと便利にする
RubyでGitHubをもうちょっと便利にする
 
WebpackとReactで作るGoogle Chrome 拡張
WebpackとReactで作るGoogle Chrome 拡張WebpackとReactで作るGoogle Chrome 拡張
WebpackとReactで作るGoogle Chrome 拡張
 
Metahub for github
Metahub for githubMetahub for github
Metahub for github
 
DevLove Kansai AWS
DevLove Kansai AWSDevLove Kansai AWS
DevLove Kansai AWS
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
 
Iron rubyとsinatraで作るデスクトップアプリ
Iron rubyとsinatraで作るデスクトップアプリIron rubyとsinatraで作るデスクトップアプリ
Iron rubyとsinatraで作るデスクトップアプリ
 
Haikara
HaikaraHaikara
Haikara
 

Mais de Kyosuke MOROHASHI

Mais de Kyosuke MOROHASHI (8)

Introduction HTTP via cURL
Introduction HTTP via cURLIntroduction HTTP via cURL
Introduction HTTP via cURL
 
Ruby ecosystem applied to agile project
Ruby ecosystem applied to agile projectRuby ecosystem applied to agile project
Ruby ecosystem applied to agile project
 
Begin cucumber-in-real-world
Begin cucumber-in-real-worldBegin cucumber-in-real-world
Begin cucumber-in-real-world
 
Cucumber in Practice(en)
Cucumber in Practice(en)Cucumber in Practice(en)
Cucumber in Practice(en)
 
Rails testing environment, 2009 fall
Rails testing environment, 2009 fallRails testing environment, 2009 fall
Rails testing environment, 2009 fall
 
TDD frameworks let me dream "Project Specific Language"
TDD frameworks let me dream "Project Specific Language"TDD frameworks let me dream "Project Specific Language"
TDD frameworks let me dream "Project Specific Language"
 
named_scope more detail - WebCareer
named_scope more detail - WebCareernamed_scope more detail - WebCareer
named_scope more detail - WebCareer
 
named_scope more detail
named_scope more detailnamed_scope more detail
named_scope more detail
 

Rails Tokyo 035 Cucumber