• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Rails-Plugin Flexturesの紹介
 

Rails-Plugin Flexturesの紹介

on

  • 1,597 views

Rails の fixture 機能拡張gem

Rails の fixture 機能拡張gem
flexturesの機能紹介

Statistics

Views

Total Views
1,597
Views on SlideShare
1,595
Embed Views
2

Actions

Likes
0
Downloads
4
Comments
0

2 Embeds 2

http://www.hanrss.com 1
http://s.deeeki.com 1

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Rails-Plugin Flexturesの紹介 Rails-Plugin Flexturesの紹介 Presentation Transcript

    • Rails Plug-in Flextures の使い方
    • ところでRails でテストデータ取り込むアレfixtures って " クソ " ですよね♪
    • 実例その1:案件 ATest::Unit 使用データ fixture 作成データは csv で作成開発は順調に進行していたが…
    • さーて、基本機能できたしそろそろ同値クラステストや境界値テストの フェーズに移りますか ( リリース1ヶ月前 )
    • Fixture の欠点 11 テーブルにつき1ファイルしか用意できない同値クラステストや境界値テスト仕様とする 頃には、依存関係の塊でそれどころではない
    • さらに開発は進むが…
    • えっ?、登録から3日以内のユーザーには 1日1回アイテム付与?
    • Fixture の欠点 2基本的にデータが静的日時チェックのテストあたりはテストするな と言われているようなもの…(YAML は erb 使えるのである程度回避できますけどね)
    • 案件 BRSpec でテストFixture はマスターデータは CSV それ以外は yaml
    • Fixture の欠点YAML で作れば erb が使えるけど活躍できる舞 台はなかった関連を生成してくれる機能があるけど、特に 書きやすいものでもない ( 書式が面倒 )総論としては大体の場合は csv の方が便利
    • 案件 CRspecFactoryGirlこれで全ての問題は解決したかに見えたが…
    • 現実 : 開発の遅延開発初期には1日に2,3回は migration が走 るmigration するたびに、作った Factory がしば しば止まるデータの不整合が起こるたびに factories.rb を 修正テストできない状況では作業できないの で、”待ち”が発生する
    • FactoryGirl の欠点データ1件の生成、修正コストは yaml 以上に 高いテーブルの構成が変わった時のコストも高い実は hatbm のテーブルって全テーブルの 1 割と かで旨みが少ない
    • という感じの募り募った”恨”が今回の gem 作成のきっかけ
    • 総論どの方法をとってもテーブルの migration がか かったあとのデータの修正コストがすごい( 初期開発ではテーブルの構成変更がよくある のでこれは痛い )柔軟な方法ほど記法が致命的に長くなって途 中でわけがわからなくなる…( そしてだんだんデータの維持管理ができなく なる )
    • 解決策データの一覧性、編集しやすさは csv は一番高 い動的性質に関しては FactoryGirl が群を抜いて いる両方の機能のイイトコ取りをしつつ、これま での問題の解決法を組み込んで行けばいいは ず…
    • 機能その 1データのお手軽ダンプrake db:flextures:dumprake db:flextutes:load実は csv をお手軽ダンプできるものは無かった (YAML はある )
    • 機能その2カラムの変更点を検知して値を自動補完する1つか2つカラムが増減しても、よく変わる 部分のカラムは設計上重要では無いのでエ ラーが出ても開発を完全停止させないほうが いい
    • RSpec で使用可能同じ書式で使えるfixtures :usersflextures :users読み込むファイルを切り替え可能flextures :users => "login_test/users"
    • FaftoryFilterFactoryGirl 風の書式でデータを動的に変更可 能 Flextures::Factory.define :users do |f| f.last_login_date = Time.now end( 実は ActiveRecord のモデルをもらっているの で、 AcitiveRecord で可能は事はここででき る)
    • Case1: テストデータの生成 ( 実演含 )
    • 想定させる使い方ソーシャルゲームを仮定して users テーブルを 作成
    • データ生成:その 210 人分のデータを生成したいので、 1 〜 10 で id だけを生成して csv ファイルを作成( デフォルトは spec/fixtures/users.csv)
    • データ生成:その 1「 config/flextures.factory.rb 」にフィルタを記 述する。今回は faker を使ってデータを生成
    • データ生成:その 3もう一度「 rake db:flextures:dump F=users 」を 実行してデータをダンプ
    • Case2: 本番環境データの取り込み
    • 検証環境のデータを取り込み検証環境で携帯を使いながら操作していると 戦闘で、バグらしき挙動を発見関係するテーブルのデータを吐き出しrake db:flextures:dump T=users,items,battle_logこれを開発環境の spec/fixtures/battle 以下に移 動
    • 検証環境のデータを取り込み持ってきたデータを spec/fixtures/battle 以下に 移動させてrake db:flextures:load DIR=battleDB に検証環境のデータを取り込まれたのでrails console でコンソールを起動して周辺の コードを試し打ちしたり ruby-debugger でブ レークポイントを貼ったりしてバグ探し
    • 検証環境のデータを取り込み原因がわかったら spec にバグを再現するテス トを作成データの切り替えは RSpec 中で以下の様に記 述 flextures :users => "battle/users", :items=>"battle/items", :battle_log => "battle/battle_log"検証環境のデータを " そのまま " 持ってきてテストケースとして使用可能
    • 最大の利点テスト用のデータと開発環境で使うデータを 同じ場所で管理できるrails colsole で実行できるデータが rspec と同じ
    • Case3: 画像のとり込み
    • 画像の DB 取り込みCSV ファイルの作成 content に画像が入るpublic/images/db/ 以下に 0001 〜 0005.jpg を設 置
    • 画像の DB への読み込みさっきと同じで flextures.factory.rb を作成あとはrake db:flextures:load T=upload_imagesで画像をロード
    • 現在の欠点安定性 !! (バグが眠っている)特に DB のデータをリセットするタイミングが まだ確定できていないRspec で before(:all) を使ったところが転ぶRails3.2 の場合警告メッセージが出るetc...
    • 現在の欠点2FactoryFilter への機能集中 ( 1テーブル1個し かフィルタを持てない)一応ファイル名を取得したり対処法はあるけ ど、まだまだ研究不足
    • あと、まとめ別に fixtures でのデータ読み込みとかは dis っ ていない(読み込み速度でかなわない )FactoryGirl も混ぜて使える(柔軟性ではこち らが上 )
    • まとめ綺麗に適応する必要はないDB のデータを csv でダンプする目的だけで 使ってもよしテスト用のデータを大量生成するために使っ てもよしRSpec で fixture を切り替えるためだけに使っ てもよし
    • とまぁ色々言いましたが
    • Gemfile に「 gem "flextures" 」して  bundleinstall するだけなので、とりあえず使ってみて ください (CSV 吐き出しだけしたいなら、オススメは 1.0.6)
    • Gemfile に「 gem "flextures" 」して  bundleinstall するだけなので、とりあえず使ってみて ください
    • ありがとうございました