SlideShare a Scribd company logo
は
             あ い
             あ か
             る ら
             す
             ぺ
             つ
@jewel_x12
             く
カップ春雨にハマっている!!!!
モダンなRails開発の
イベントや!!!!!
うおーーーーー!!!
モダンなRails
  Rails3 かなぁ?
DHH
はいからなRails開発
のイベントや!!!!
うおーーーーー!!!
どちらにしろ、自分の知識
はRails2で止まっている
イケてるRails3アプリを
  読みましょう!
 Fat Free CRMのRSpec辺りを読んだ!
Fat Free CRM
https://github.com/fatfreecrm/fat_free_crm

 オープンソースな顧客関係管理プラットホーム


「今読みたいRuby on Rails3アプリ 10選 」
 ( http://el.jibun.atmarkit.co.jp/rails/2012/07/ruby-on-rails3--ae71.html )

      から一発で動いたものを選んできた。
今日の内容
Fat Free CRMより
     Spork
   Simplecov
     fuubar
  factory_girl
     ffaker
   capybara
Ψ Spork Ψ
               テストの高速化

• Distributed Ruby(DRb)を利用したサーバにRailsア
プリを前もって読み込ませておく

• RSpecやCucumberに対応
• RSpec
 •spork rspec --bootstrap してから spork で起動
• Cucumber
 •spork cucumber --bootstrap したら spork cuc
 で起動
% Simplecov %
  テストのカバレッジを見る
% Simplecov %
                    テストのカバレッジを見る

• RSpecやCucumberにも対応

• simplecov-rcovでRCov出力ができるの
で、Jenkinsと連携可能


• そのままSporkと使おうとすると動かない
https://github.com/colszowka/simplecov/issues/42#issuecomment-4440284
= Fuubar =
 RSpecテストのプログレスバー




テストの進 状況を確認!
進まないプログレスバー!
♥ FactoryGirl ♥
        テスト用データを記述する
FactoryGirl.define do
  factory :precure do
    name       "Misumi Nagisa"
    cure_name "Cure Black"
  end

  factory :cure_dream, class: Precure do
    name       "Yumehara Nozomi"
    cure_name "Cure Dream"
  end
end

# データを作るだけ
cure_black = FactoryGirl.build :precure

# 保存まで行う
cure_dream = FactoryGirl.create :cure_dream
♥ FactoryGirl ♥
          テスト用データを記述する


FactoryGirl.define do
  factory :precure do
    base_name "Peach"
    cure_name "Cure #{base_name}"
  end
end

FactoryGirl.build(:precure, base_name:”Pine”).cure_name
#=> “Cure Pine”



     他の属性に依存することもできる
♥ FactoryGirl ♥
                 テスト用データを記述する

         # Defines a new sequence
         FactoryGirl.define do
           sequence :email do |n|
             "person#{n}@example.com"
           end
         end

         FactoryGirl.generate :email
         # => "person1@example.com"

         FactoryGirl.generate :email
         # => "person2@example.com"



                 連続的に生成できるデータ

https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md
♥ FactoryGirl ♥
          テスト用データを記述する



•has_manyな関係も記述できる

•Spork と使う時は、factory を書き換えても反
映されない
•Spork.each_run で FactoryGirl.reload
☁ FFaker ☁
         それっぽいデータを作る

require 'ffaker'
Faker::Name.name => "Christophe Bartell"
Faker::Internet.email =>
"kirsten.greenholt@corkeryfisher.info"

             https://github.com/EmmanuelOga/ffaker




• FactoryGirl とかと組み合わせて使う
• 本家の Faker より20倍早いらしい
ω capybara ω
                ブラウザをシミュレート
 • Rackアプリの結合テストをサポート
 • cucumberで使うと便利
describe "the signup process", :type => :request do
  before :each do
    User.make(:email => 'user@example.com', :password => 'caplin')
  end
  it "signs me in" do
    within("#session") do
      fill_in 'Login', :with => 'user@example.com'
      fill_in 'Password', :with => 'password'
    end
    click_link 'Sign in'
  end
end

                 https://github.com/jnicklas/capybara/
ω capybara ω
           ブラウザをシミュレート
    page.should have_selector('table tr')
    page.should have_selector(:xpath, '//table/tr')
    page.should have_no_selector(:content)

    page.should have_xpath('//table/tr')
    page.should have_css('table tr.foo')
    page.should have_content('foo')

• page オブジェクトが生成される
 • page.has_selector? を持っている
• current_path オブジェクトも生成され
る
• page.save_screenshot( yabai.png )
まとめ

• 便利なのがたくさんある
• 紹介したのは道具でしかなく、テスト
ケースをどうするかが本質
まとめ

• 便利なのがたくさんある
• 紹介したのは道具でしかなく、テスト
ケースをどうするかが本質



 おじゃんでした♪
_人人人人人人人人人_
> 突然のcucumber <
 ̄^Y^Y^Y^Y^Y^Y^Y^ ̄
胡 Cucumber 瓜
  顧客受け入れテスト




 とりあえずメモを貼
 り付けておきます。
胡 Cucumber 瓜
                   受け入れテスト


    顧客-開発者間等と、お互いが理
    解できる言葉で記述できる。


         統合テストはCucumber
      RSpecで単体テストという感じか


rails generate cucumber:install --spork --capybara --rspec
胡 Cucumber 瓜
     顧客受け入れテスト



フィーチャ、cucumberコマンド、ス
テップ定義の3つの部分で構成


シナリオをRubyで書かれたステップ定
義にマッピング
胡 Cucumber 瓜
       顧客受け入れテスト

フィーチャ
 ユーザの視点似たっておおまかに表現された要件


誰に対するフィーチャなのか
--- 在庫管理者が在庫品目を追加する
--- 匿名の訪問者がブログコメントを追加する
胡 Cucumber 瓜
                      顧客受け入れテスト
Gherkin
 .feature ファイルを解釈するインタプリタ


文法(キーワード)は
Feature, Background, Scenario (Outline), Scenarios (Examples), Given, When,
Then, And, But
フィーチャ, 背景, シナリオ, シナリオアウトライン, サンプル (例), 前提, もし, ならば,
かつ, ただし



多くの言語に翻訳されている。
featureファイルの最初に # language: ja
胡 Cucumber 瓜
       顧客受け入れテスト



シナリオ
 ソフトウェアがどのような振る舞いをすべきか
 一般的なシナリオから始まり、特異なケースを説明
 するシナリオを追加していく
胡 Cucumber 瓜
          顧客受け入れテスト

ステップ
 Given, When, THen, And, But のステップ
 キーワードで始まる行(前提, もし, ならば, か
 つ, ただし)


 これらのキーワードは振る舞いを表す
「当座預金口座の残高が100ドルであるとすれば
(Given)、もし70ドルを引き出せば(When)、残高は3
0ドルになるはずである(Then)。
胡 Cucumber 瓜
      顧客受け入れテスト

Given(前提)
 シナリオにおいて事実として受け入れるもの


当座預金口座の残高が100ドルであるとすれば
僕が娘溺泉に落ちたとすれば
女の子は誰でもプリキュアになれるとすれば
胡 Cucumber 瓜
   顧客受け入れテスト

 When(もし)
  シナリオにおけるイベント


 15ドル引き出した
 水をかぶる
 キュアドリームに変身する
胡 Cucumber 瓜
     顧客受け入れテスト



Then(ならば)
 残高は85ドルである
 女性になる
 プリキュアシューティングスターが使える
胡 Cucumber 瓜
        顧客受け入れテスト


タグ
 @
 タグは関係者に開発途中のシナリオは見せない場合
 やテーマを設定する場合に使う


Before等のフックもある
胡 Cucumber 瓜
           顧客受け入れテスト

World
 各シナリオは World オブジェクトの文脈で実行さ
 れる


/features/support/world.rb にヘルパーメソッド
を持つモジュール定義等を書いておき


World( Mod ) として World を拡張することができ
る
胡 Cucumber 瓜
   顧客受け入れテスト



実物見たほうが早いわ!!!



 おじゃんでした♪

More Related Content

What's hot

Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
CLARA ONLINE, Inc.
 
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
Naotoshi Seo
 
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
Kohei Hoshi
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
Yasutaka Hamada
 
実用裏方 Perl 入門
実用裏方 Perl 入門実用裏方 Perl 入門
実用裏方 Perl 入門
keroyonn
 
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugChef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugTakeshi Komiya
 
Ansible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれからAnsible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれから
Takeshi Kuramochi
 
明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudyTakeshi Komiya
 
Ansible入門...?
Ansible入門...?Ansible入門...?
Ansible入門...?
shirou wakayama
 
意識の低い自動化
意識の低い自動化意識の低い自動化
意識の低い自動化
greenasparagus
 
Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)hiboma
 
consul & consul-alerts を使った監視システム (hbstyle-2015-01-08)
consul &  consul-alerts を使った監視システム (hbstyle-2015-01-08)consul &  consul-alerts を使った監視システム (hbstyle-2015-01-08)
consul & consul-alerts を使った監視システム (hbstyle-2015-01-08)
YOSHIKAWA Ryota
 
chat bot framework for Java8
chat bot framework for Java8chat bot framework for Java8
chat bot framework for Java8
masahitojp
 
Open Source System Administration Framework - Func
Open Source System Administration Framework - FuncOpen Source System Administration Framework - Func
Open Source System Administration Framework - FuncGosuke Miyashita
 

What's hot (19)

Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
 
Puppet on AWS
Puppet on AWSPuppet on AWS
Puppet on AWS
 
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
 
NDS#31
NDS#31NDS#31
NDS#31
 
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
 
Mina 20130417
Mina 20130417Mina 20130417
Mina 20130417
 
Niigata.pm #1
Niigata.pm #1Niigata.pm #1
Niigata.pm #1
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
 
実用裏方 Perl 入門
実用裏方 Perl 入門実用裏方 Perl 入門
実用裏方 Perl 入門
 
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugChef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
 
Ansible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれからAnsible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれから
 
明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy
 
Grails 2.0.0.M1の話
Grails 2.0.0.M1の話 Grails 2.0.0.M1の話
Grails 2.0.0.M1の話
 
Ansible入門...?
Ansible入門...?Ansible入門...?
Ansible入門...?
 
意識の低い自動化
意識の低い自動化意識の低い自動化
意識の低い自動化
 
Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)
 
consul & consul-alerts を使った監視システム (hbstyle-2015-01-08)
consul &  consul-alerts を使った監視システム (hbstyle-2015-01-08)consul &  consul-alerts を使った監視システム (hbstyle-2015-01-08)
consul & consul-alerts を使った監視システム (hbstyle-2015-01-08)
 
chat bot framework for Java8
chat bot framework for Java8chat bot framework for Java8
chat bot framework for Java8
 
Open Source System Administration Framework - Func
Open Source System Administration Framework - FuncOpen Source System Administration Framework - Func
Open Source System Administration Framework - Func
 

Viewers also liked

Ruby motion
Ruby motionRuby motion
Ruby motionjewel12
 
Top 10 sports cars
Top 10 sports carsTop 10 sports cars
Top 10 sports cars
rmsrmsrmsrms
 
Ranbaxy final project
Ranbaxy final projectRanbaxy final project
Ranbaxy final projectRahul Rai
 
Top 10 sports cars
Top 10 sports carsTop 10 sports cars
Top 10 sports cars
rmsrmsrmsrms
 
Hcl cdc project
Hcl cdc projectHcl cdc project
Hcl cdc project
Rahul Rai
 
Business Quiz
Business QuizBusiness Quiz
Business Quiz
Pavan Reddy
 
Ranbaxy final project
Ranbaxy final projectRanbaxy final project
Ranbaxy final project
Rahul Rai
 
Ranbaxy final project
Ranbaxy final projectRanbaxy final project
Ranbaxy final project
Rahul Rai
 
It sector & cma's
It sector & cma'sIt sector & cma's
It sector & cma's
Rahul Rai
 
Ims2016 micro apps_robertbrennan_pll_frequencyplanning_v2
Ims2016 micro apps_robertbrennan_pll_frequencyplanning_v2Ims2016 micro apps_robertbrennan_pll_frequencyplanning_v2
Ims2016 micro apps_robertbrennan_pll_frequencyplanning_v2
Analog Devices, Inc.
 
RadioVerse
RadioVerseRadioVerse
Final future group
Final future groupFinal future group
Final future groupsrmsibs
 
Clustering
ClusteringClustering
Clustering
Meme Hei
 
Rubymotion
RubymotionRubymotion
Rubymotionjewel12
 

Viewers also liked (15)

Ruby motion
Ruby motionRuby motion
Ruby motion
 
Top 10 sports cars
Top 10 sports carsTop 10 sports cars
Top 10 sports cars
 
Ranbaxy final project
Ranbaxy final projectRanbaxy final project
Ranbaxy final project
 
Top 10 sports cars
Top 10 sports carsTop 10 sports cars
Top 10 sports cars
 
Hcl cdc project
Hcl cdc projectHcl cdc project
Hcl cdc project
 
OtaQ
OtaQOtaQ
OtaQ
 
Business Quiz
Business QuizBusiness Quiz
Business Quiz
 
Ranbaxy final project
Ranbaxy final projectRanbaxy final project
Ranbaxy final project
 
Ranbaxy final project
Ranbaxy final projectRanbaxy final project
Ranbaxy final project
 
It sector & cma's
It sector & cma'sIt sector & cma's
It sector & cma's
 
Ims2016 micro apps_robertbrennan_pll_frequencyplanning_v2
Ims2016 micro apps_robertbrennan_pll_frequencyplanning_v2Ims2016 micro apps_robertbrennan_pll_frequencyplanning_v2
Ims2016 micro apps_robertbrennan_pll_frequencyplanning_v2
 
RadioVerse
RadioVerseRadioVerse
RadioVerse
 
Final future group
Final future groupFinal future group
Final future group
 
Clustering
ClusteringClustering
Clustering
 
Rubymotion
RubymotionRubymotion
Rubymotion
 

Similar to Haikara

EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
Kentaro Ohkouchi
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
Masashi Shinbara
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発emasaka
 
Capistrano in practice - WebCareer
Capistrano in practice - WebCareerCapistrano in practice - WebCareer
Capistrano in practice - WebCareer
Kyosuke MOROHASHI
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
Mori Shingo
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...Naoya Ito
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Kei IWASAKI
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
totty jp
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
Hiro Yoshioka
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
emasaka
 
Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3editionRails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3editionSatomi Tsujita
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
龍一 田中
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
dcubeio
 
AWS Lambdaで作るクローラー/スクレイピング
AWS Lambdaで作るクローラー/スクレイピングAWS Lambdaで作るクローラー/スクレイピング
AWS Lambdaで作るクローラー/スクレイピング
Takuro Sasaki
 
ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像
Kiwamu Okabe
 
SocketStream入門
SocketStream入門SocketStream入門
SocketStream入門
Kohei Kadowaki
 

Similar to Haikara (20)

EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
 
Capistrano in practice - WebCareer
Capistrano in practice - WebCareerCapistrano in practice - WebCareer
Capistrano in practice - WebCareer
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3editionRails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3edition
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
AWS Lambdaで作るクローラー/スクレイピング
AWS Lambdaで作るクローラー/スクレイピングAWS Lambdaで作るクローラー/スクレイピング
AWS Lambdaで作るクローラー/スクレイピング
 
ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像
 
SocketStream入門
SocketStream入門SocketStream入門
SocketStream入門
 

Haikara

  • 1. あ い あ か る ら す ぺ つ @jewel_x12 く
  • 5.
  • 6. DHH
  • 9. イケてるRails3アプリを 読みましょう! Fat Free CRMのRSpec辺りを読んだ!
  • 10. Fat Free CRM https://github.com/fatfreecrm/fat_free_crm オープンソースな顧客関係管理プラットホーム 「今読みたいRuby on Rails3アプリ 10選 」 ( http://el.jibun.atmarkit.co.jp/rails/2012/07/ruby-on-rails3--ae71.html ) から一発で動いたものを選んできた。
  • 11. 今日の内容 Fat Free CRMより Spork Simplecov fuubar factory_girl ffaker capybara
  • 12. Ψ Spork Ψ テストの高速化 • Distributed Ruby(DRb)を利用したサーバにRailsア プリを前もって読み込ませておく • RSpecやCucumberに対応 • RSpec •spork rspec --bootstrap してから spork で起動 • Cucumber •spork cucumber --bootstrap したら spork cuc で起動
  • 13. % Simplecov % テストのカバレッジを見る
  • 14. % Simplecov % テストのカバレッジを見る • RSpecやCucumberにも対応 • simplecov-rcovでRCov出力ができるの で、Jenkinsと連携可能 • そのままSporkと使おうとすると動かない https://github.com/colszowka/simplecov/issues/42#issuecomment-4440284
  • 15. = Fuubar = RSpecテストのプログレスバー テストの進 状況を確認! 進まないプログレスバー!
  • 16. ♥ FactoryGirl ♥ テスト用データを記述する FactoryGirl.define do factory :precure do name "Misumi Nagisa" cure_name "Cure Black" end factory :cure_dream, class: Precure do name "Yumehara Nozomi" cure_name "Cure Dream" end end # データを作るだけ cure_black = FactoryGirl.build :precure # 保存まで行う cure_dream = FactoryGirl.create :cure_dream
  • 17. ♥ FactoryGirl ♥ テスト用データを記述する FactoryGirl.define do factory :precure do base_name "Peach" cure_name "Cure #{base_name}" end end FactoryGirl.build(:precure, base_name:”Pine”).cure_name #=> “Cure Pine” 他の属性に依存することもできる
  • 18. ♥ FactoryGirl ♥ テスト用データを記述する # Defines a new sequence FactoryGirl.define do sequence :email do |n| "person#{n}@example.com" end end FactoryGirl.generate :email # => "person1@example.com" FactoryGirl.generate :email # => "person2@example.com" 連続的に生成できるデータ https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md
  • 19. ♥ FactoryGirl ♥ テスト用データを記述する •has_manyな関係も記述できる •Spork と使う時は、factory を書き換えても反 映されない •Spork.each_run で FactoryGirl.reload
  • 20. ☁ FFaker ☁ それっぽいデータを作る require 'ffaker' Faker::Name.name => "Christophe Bartell" Faker::Internet.email => "kirsten.greenholt@corkeryfisher.info" https://github.com/EmmanuelOga/ffaker • FactoryGirl とかと組み合わせて使う • 本家の Faker より20倍早いらしい
  • 21. ω capybara ω ブラウザをシミュレート • Rackアプリの結合テストをサポート • cucumberで使うと便利 describe "the signup process", :type => :request do before :each do User.make(:email => 'user@example.com', :password => 'caplin') end it "signs me in" do within("#session") do fill_in 'Login', :with => 'user@example.com' fill_in 'Password', :with => 'password' end click_link 'Sign in' end end https://github.com/jnicklas/capybara/
  • 22. ω capybara ω ブラウザをシミュレート page.should have_selector('table tr') page.should have_selector(:xpath, '//table/tr') page.should have_no_selector(:content) page.should have_xpath('//table/tr') page.should have_css('table tr.foo') page.should have_content('foo') • page オブジェクトが生成される • page.has_selector? を持っている • current_path オブジェクトも生成され る • page.save_screenshot( yabai.png )
  • 26. 胡 Cucumber 瓜 顧客受け入れテスト とりあえずメモを貼 り付けておきます。
  • 27. 胡 Cucumber 瓜 受け入れテスト 顧客-開発者間等と、お互いが理 解できる言葉で記述できる。 統合テストはCucumber RSpecで単体テストという感じか rails generate cucumber:install --spork --capybara --rspec
  • 28. 胡 Cucumber 瓜 顧客受け入れテスト フィーチャ、cucumberコマンド、ス テップ定義の3つの部分で構成 シナリオをRubyで書かれたステップ定 義にマッピング
  • 29. 胡 Cucumber 瓜 顧客受け入れテスト フィーチャ ユーザの視点似たっておおまかに表現された要件 誰に対するフィーチャなのか --- 在庫管理者が在庫品目を追加する --- 匿名の訪問者がブログコメントを追加する
  • 30. 胡 Cucumber 瓜 顧客受け入れテスト Gherkin .feature ファイルを解釈するインタプリタ 文法(キーワード)は Feature, Background, Scenario (Outline), Scenarios (Examples), Given, When, Then, And, But フィーチャ, 背景, シナリオ, シナリオアウトライン, サンプル (例), 前提, もし, ならば, かつ, ただし 多くの言語に翻訳されている。 featureファイルの最初に # language: ja
  • 31. 胡 Cucumber 瓜 顧客受け入れテスト シナリオ ソフトウェアがどのような振る舞いをすべきか 一般的なシナリオから始まり、特異なケースを説明 するシナリオを追加していく
  • 32. 胡 Cucumber 瓜 顧客受け入れテスト ステップ Given, When, THen, And, But のステップ キーワードで始まる行(前提, もし, ならば, か つ, ただし) これらのキーワードは振る舞いを表す 「当座預金口座の残高が100ドルであるとすれば (Given)、もし70ドルを引き出せば(When)、残高は3 0ドルになるはずである(Then)。
  • 33. 胡 Cucumber 瓜 顧客受け入れテスト Given(前提) シナリオにおいて事実として受け入れるもの 当座預金口座の残高が100ドルであるとすれば 僕が娘溺泉に落ちたとすれば 女の子は誰でもプリキュアになれるとすれば
  • 34. 胡 Cucumber 瓜 顧客受け入れテスト When(もし) シナリオにおけるイベント 15ドル引き出した 水をかぶる キュアドリームに変身する
  • 35. 胡 Cucumber 瓜 顧客受け入れテスト Then(ならば) 残高は85ドルである 女性になる プリキュアシューティングスターが使える
  • 36. 胡 Cucumber 瓜 顧客受け入れテスト タグ @ タグは関係者に開発途中のシナリオは見せない場合 やテーマを設定する場合に使う Before等のフックもある
  • 37. 胡 Cucumber 瓜 顧客受け入れテスト World 各シナリオは World オブジェクトの文脈で実行さ れる /features/support/world.rb にヘルパーメソッド を持つモジュール定義等を書いておき World( Mod ) として World を拡張することができ る
  • 38. 胡 Cucumber 瓜 顧客受け入れテスト 実物見たほうが早いわ!!! おじゃんでした♪