は
             あ い
             あ か
             る ら
             す
             ぺ
             つ
@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 瓜
   顧客受け入れテスト



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



 おじゃんでした♪

Haikara

  • 1.
    あ い あ か る ら す ぺ つ @jewel_x12 く
  • 2.
  • 3.
  • 4.
  • 6.
  • 7.
  • 8.
  • 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 )
  • 23.
  • 24.
  • 25.
  • 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 瓜 顧客受け入れテスト 実物見たほうが早いわ!!! おじゃんでした♪