環境
- rails(ruby2.1.0, rails4.0.3)
- grape(API)
rails4でのrspecリファクタリングメモ。テストのコード量が増えてきたので、色々と試行錯誤してます。
リファクタリング前
FactoryGirlが重複しているコード。
it "all request parameter is exists" do FactoryGirl.create(:user1) put "api/v1/user", {:id => user1.id} end it "xxx request parameter is exists" do FactoryGirl.create(:user1) put "api/v1/user", {:id => user1.id, xxx => "aaaa"} end it "yyy request parameter is exists" do FactoryGirl.create(:user1) put "api/v1/user", {:id => user1.id, yyy => "aaaa"} end
リファクタリング後
let(:user1) {FactoryGirl.create(:user1)} it "all request parameter is exists" do put "api/v1/user", {:id => user1.id} end it "xxx request parameter is exists" do put "api/v1/user", {:id => user1.id, xxx => "aaaa"} end it "yyy request parameter is exists" do put "api/v1/user", {:id => user1.id, yyy => "aaaa"} end
letを使うことで、lazy loadしてspecテストが終わるまでuser1変数をキャッシュとして使っています。
ただし、変数として必要ない場合はletでなくbeforeを使ってテストデータを挿入してます。理由は僕のプロジェクトの場合、dbcleanerでテストごとにマスタ以外のテーブルを空にしているからです。
しかし、rspecでコードをdryに保つのは本当に大変です。この辺のかける時間と必要性のバランスは本当に永遠の課題ですね。
0 件のコメント:
コメントを投稿