世界線航跡蔵

Mad web programmerのYuguiが技術ネタや日々のあれこれをお送りします。

2007年03月13日

RSpecにおけるコンテキストをまたぐ共通部分

先日書いたSeleniumRC specの中で使ってたテクニックが最近、会社で流行ってる。

2007-12-04追記: このテクニックはRSpec 0.8以前のために開発しました。RSpec 1.0以降ではshared behaviourを使いましょう。ただ、RSpecをいじくる技法の基礎として参考にはなるかもしれません。

コンテキストにおける共通の初期化処理は勿論、setupやcontext_setupに書けばいいんだけど、問題は複数のコンテキストにまたがる共通の初期化処理。あるいは、modelのspecでfixtureを設定したり、controllerのspecにおいてコントローラー名を指定したり。

これらって、いちいち書くのがなんかDRYじゃない気がする。特に、1つのmodelに対するspecがcontextから構成されるとき(諸橋さん方式。contextという言葉の意味合いから言えば、無理に1つのコンテキストにするよりこの方が自然なはず)、でもfixtureの読み込みは毎回同じだったり。コントローラー指定はよく書き忘れるけど、書き忘れるとよく分からないエラーが出るし。

で、こうするわけだ。model Hogeに対するspecであるとすれば、そのspecファイルの頭でこんなメソッドを定義する。

def hoge_context(*args, &block)
  context(*args) do
    fixtures :hoge, :huga, :hugu

    context_setup do
       # なんか共通の初期化
    end

    instance_eval(&block) 
  end
end

で、以降はcontextの代わりにhoge_contextを使用する。DRYで安全。お手軽簡単。

トラックバック

http://yugui.jp/articles/596/ping

現在のところトラックバックはありません

コメント

blog comments powered by Disqus

ご案内

前の記事
次の記事

タグ一覧

過去ログ

  1. 2016年07月
  2. 2016年01月
  3. 2015年09月
  4. 2015年08月
  5. 過去ログ一覧

フィード

フィードとは

その他

Powered by "rhianolethe" the blog system