もふもふ技術部

RSpecをリファクタリングしたくなってきたので次はletを使ってみよう


前回subjectを使ってrspecのテストコードをリファクタリングしてみました。次はletを使ってみることにします。

前回
http://j-caw.co.jp/blog/?p=1361

letとは?

主にこちらを参考にしました。
http://magazine.rubyist.net/?0035-RSpecInPractice

letはデータ定義に使われる構文のようです。位置付けとしてはbeforeに近いものですが、下記のような特長があります。

  • 遅延ロードされるのでletブロック内のコードは実際に使用されるときまで実行されない
  • 一度letブロック内のコードが実行されると結果値を記憶しておいてくれるので二度実行されない(メモ化)

これだけだとさほどありがたくないような気もするんですが、letを使うと下記のように書き換えることができます。

元のテストコード

リファクタリング後のテストコード

行数は増えていますが、letによって create(:item, price: ○○)というコードの重複を排除しています。こうすることにより、余計な構文がなくなってcontextがより明確になった感じがしますね。最近contextごとのbeforeが多くなってしまう傾向があるのでletを使うと解消出来そうです。

The following two tabs change content below.
原田 敦

原田 敦

日本CAWのエンジニア。もふもふ部の部長。得意分野はRuby on Railsを使った小規模WEBアプリケーションを高速で開発すること。週末の楽しみは一人お菓子パーティー。三度の飯より小動物をもふもふするのが好きです。