-
Notifications
You must be signed in to change notification settings - Fork 3
Unit test supportの説明
flexturesはRspecやminitest等のユニットテストツールから、データを呼び出すための関数を用意しています
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を利用した場合も呼び出し方は同じで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 )
例えば、データの作成日を毎回今日にしたいという場合、CSVファイルに既に登録されているデータは邪魔です この様に指定すると、読み込んだCSVファイルから created_at,updated_at のデータを削除してデータを読み込みます
describe Monster do
flextures( { minus:[:created_at,:updated_at], silent: true }, :users )
strictオプションをONにすると、データの加工やnullのデータの補完などを一切行わないで 読み込みエラーが起きたときはそのままエラーをraiseします
describe Monster do
flextures( { strict: true }, :users )
unfilterオプションをONにすると、FactoryFilterの機能を停止して読み込みを行います
describe Monster do
flextures( { unfilter: true }, :users )