2014年9月28日日曜日

rails4 rspecリファクタリング

環境

  • 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 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...