Skip to content

Unit test supportの説明

baban edited this page May 25, 2016 · 17 revisions

Unit test supportの説明

flexturesはRspecやminitest等のユニットテストツールから、データを呼び出すための関数を用意しています

Rspecの場合

Rspecの場合は通常のfixtureと同じようにflexturesの名前でデータを読み出すことが出来ます

 describe ItemShopController do
  flextures :users, :items

何らかの事情で、テーブル名と違うファイル名であったり、違うディレクトリへの設置を行いたい場合は ハッシュの引数で渡してやることで、テーブル名とファイル名を指定する事が出来ます

 describe ItemShopController do
  flextures :items, :users => "itmshop/users" # load "itemshop/users.csv"

「all」という値を渡してやると、読み込めるすべてのfixtureのデータを読み込んでくれます 

 describe ItemShopController do
  flextures :all

読み込みにはオプションを指定できます 方法は、flexturesメソッドの第1引数にハッシュとしてオプションを引き渡すだけです 次の例では、FactoryFilterの適応をしないでデータのロードをうオプションを引き渡しています

 describe ItemShopController do
  flextures( { unfilter: true }, :users )

minitest Support

minitestを利用した場合も呼び出し方は同じでflextures関数にテーブルの名前を指定してやるだけです

class LoadTest < Test::Unit::TestCase
  context "context" do
    flextures :users

その他の関数

fixtures関数以外に、テスト向けに以下の関数が設定されています

method name description
flextures_delete(table_names) データを空にしたいテーブルの一覧
flextures_set_options(options) オプションの設定をコンテキストごとにまとめて設定します

オプションについて

現在は以下の様なオプションを引き渡すことができます

option description
dir fixtureを読み込むディレクトリを指定出来ます
minus ここで指定されたカラムのデータは読み込む前に破棄されて、FactoryFilterやfixturesが保管したものが引き渡されます
silent できるだけエラーメッセージを出力しないようにします
stair 階差ロード機能をONにします
strict データのロード時に値の補完を自動で行わないでエラーをそのままraiseします
unfilter FactoryFilterを適応しないでデータのロードを行います
controller "controllers/オプションで与えられたコントローラ名" のディレクトリからデータを探します
action "controllers/コントローラ名/アクション名" のディレクトリからデータを探します
model "models/モデル名" のディレクトリからデータを探します
method "models/モデル名/アクション名" のディレクトリからデータを探します
cache (ver 3.1で追加) 一度読み込んだデータに変更が無かった場合、DB上にキャッシュされたデータをそのまま使います。テストの高速化に非常に有用ですが注意事項があります

ディレクトリ指定について

fixtureは読み込むデータのディレクトリを指定可能です  例えば以下の様に指定をすれば spec/fixtures 以下の users.csv ではなく  spec/fixtures/itemshop 以下の users.csv を読み出します

 describe ItemShopController do
  flextures( { dir:"itemshop" }, :users )

ただしMVCのフレームワーク上の開発の場合、テストデータを分けたいというのは

特定のモデルのメソッドやコントローラー上の挙動の場合が多いので、見分けやすいように置き場所やオプション名とを特別に設定しています

次の様に、コントローラー名とアクション名を引数として渡してやると spec/fixtures/ 以下の controllers/itemshop/buy 以下にある users.csv を探します

 describe ItemShopController do
  flextures( { controller:"itemshop", action:"buy" }, :users )

アクション名は特に指定は必要なく、コントローラー名だけの指定でも動作します その場合は controllers/itemshop/ 以下にあるファイルが探索されます

このオプションと階差ロード機能を使うことで 特別なデータが必要なテーブルだけ、決まった場所のディレクトリにファイルを設置して テストを行う事ができるようになります

ちなみに、モデルの場合は以下の様な書式です この場合は spec/fixtures/ 以下の models/monster/attack 以下にある users.csv を探します (methodは省略できます)

 describe Monster do
  flextures( { models:"monsters", method:"attack", stair: true }, :users )

minus オプションについて

例えば、データの作成日を毎回今日にしたいという場合、CSVファイルに既に登録されているデータは邪魔です この様に指定すると、読み込んだCSVファイルから created_at,updated_at のデータを削除してデータを読み込みます

 describe Monster do
  flextures( { minus:[:created_at,:updated_at], silent: true }, :users )

strict オプションについて

strictオプションをONにすると、データの加工やnullのデータの補完などを一切行わないで 読み込みエラーが起きたときはそのままエラーをraiseします

 describe Monster do
  flextures( { strict: true }, :users )

unfilter オプションについて

unfilterオプションをONにすると、FactoryFilterの機能を停止して読み込みを行います

 describe Monster do
  flextures( { unfilter: true }, :users )