Rails勉強会@東京第38回

  • 今日は TIS さんにて開催
    • 会場提供ありがとうございます.
  • 今日もおとなしめで.

セッション案

セッション

RSpec と Cuke

  • 2009/01/24の仙台Ruby会議での発表資料
  • 永和システムマネジメントの提供です.
いままでのテストを振り返る
    • Cucumber で受け入れテスト
    • RSpec単体テストで書くべき
    • Controller とか View とか Helper もいいのではないかな
  • 2006年までは
    • UnitTest/FunctionalTest でテスト
      • いままでのテスト?
      • フレームワークがテスト環境を用意しているのが良かったのではないか
  • 2007年-2008年は?
    • RSpec が出てきた
    • Model/View/Controller/Helper を個別に RSpec でテスト
    • Integration テストで,全体をテスト
  • 2009年からは?
    • Cucumber で統合テスト
    • Model を RSpec でテスト
Test for developer
  • RSpec on Rails 以前は
    • UnitTest
      • Model のテスト
    • FunctionalTest
      • View/Controller/Helper のテスト
    • Integration
  • RSpec
    • BDD フレームワーム
    • Stub/Mock が build-in
    • RSpec で Model/Controller/View/Helper の個別のテストはできるようになった
    • ただ Integration テストは・・・・
  • Cucumber 到来
    • Integration テストが超楽に書ける
    • 二段構え
      • features で仕様を
      • steps で Ruby コードを実行
    • step では
      • 普通の Ruby コード
        • Active Record でリソースをゲット
        • Nokogiri/Webrat でほげほげ
  • なぜ Better Integration Test なのか
    • Rails のは書くのが難しかった
    • そこで Webrat
      • Web アプリを外から操作する DSL セット
        • リンクを辿る
          • アンカーテキストで書ける
          • 404 や 500 だとエラーになる
        • ボタンを押す
        • フォームに入力する
      • 1度 step を書けばよい
        • 書かなければいけない
      • 日本語で書かれてるのいいよ!母国語だし
        • その「仕様」を Ruby で実行できるのがいい!
      • 独自の step 14個で C0 Coverage 80%超
        • spec と併せて 90%超
  • 限界が
    • 実際にリクエストを飛ばす訳じゃない
    • JS や CSS の検証は必要
  • 方針として
    • Fat Model
      • ロジックはモデルに
    • Thin Controller
      • find/new 以外のモデルのメソッドは1つぐらいにしといた方がいい
    • そうすると
      • RSpec で Model のテスト
      • Cucumber で統合テスト
Cycle of development
  • 書き方
    1. feature/step を書く
    2. テストする
    3. 失敗する
    4. テストをパスするように書く
    5. 繰り返す
    6. 資金が尽きるまで繰り返す
  • クライアントと Cucumber ベースに仕様を詰める
まとめ
  • RSpec + Cucumber でテストの仕方が変わった
  • クライアントとも Cucumber ベースで受け入れテストがしやすい
Q&A
  • Selenium との共存は?
  • 認証系は?
    • パスワードログインは余裕
    • OpenID もモジュール書いた
  • Windows だと?
  • Cucumber はそのままで大丈夫?
    • feature は Framework 変わっても大丈夫そう
    • step は個別のモジュールに応じて書き換える必要はある
  • テストの変更コストは?
    • DOMが変わっても,
  • テストの C0 Coverage は高め
  • 一つのシナリオに対して,複数のデータセットを適用可能
  • public 内のファイルは?
Rails 2.3.0 を読む
  • Rack 対応になった
    • スッキリした感じ?
    • Rails 2.3.0RC では Rack 1.0 で動作している
  • Active Record
    • Nested Model と default_scope は便利そうです
  • Action Controller
    • render が賢くなった
    • application.rb が application_controller.rb に変更された
    • routing が高速に
    • i18n 対応(show.ja.html.erb)
  • Action View
    • render @article で render :partial => "..." が呼ばれるように
  • Active Support
    • Object#try
      • NoMethodError を返さないようになった
  • Railities
    • Metal
      • app/metal 以下に Rails を呼ばずに返せる高速コントローラのようなもの
    • template
      • rails でアプリを作るときに最初にやることなどを定型化して実行できるテンプレート
    • autoload を使って lazy-loading するようになった
  • Rails Engines
    • plugin に model/controller/view/helper などを設置できる

まとめとKPT

  • セッションネタとしては,公式ネタがどれぐらいあるかに依存することもある
  • ust 番長ありがとう!
  • 初心者セッションあって良かった
  • 初参加の人が少なめでした