Skip to content

Instantly share code, notes, and snippets.

@fukajun
Created December 10, 2012 12:23
Show Gist options
  • Select an option

  • Save fukajun/4250267 to your computer and use it in GitHub Desktop.

Select an option

Save fukajun/4250267 to your computer and use it in GitHub Desktop.
rspec

テストコード

最近、rspecでのテストの書き方について#sendagayarb にて話をしました。 結構みんな、書き方について迷っている感があるし、僕も最近テストを意識して書くようになってきたので正しいかわからなかったけど以外に好評だったので書いて見る。

let before it の使い方

it

想定する動作結果の値のチェックを書く itでテストを行うためのデータの準備だったり、テストする対象の動作を書けるけど、基本的にその辺のことはbefore、letに任せたほうがわかりやすくなる。

before

テストしたい対象の動作を再現する処理を書く 一般的には it の前で必要な処理を書く、ここの中で前提となるようなデータの準備も行うこともできるけど、基本的にはデータの準備は次のletを使ってデータを作るほうがすっきりしてわかりやすい。

let

テスト内で使用するデータを準備、定義を書く beforeのところでも書いたけど、letではあくまでテストのために必要なデータの準備に集中するほうが、そのテストのときはどんなデータを想定していて、どういう登場人物がいるのかがわかりやすい。

context

上で述べているit before letの使い方をするためには、contextでケースが必要になってくる。 rspecで、contextの引数には、説明を渡すようになっているのでここで「わかりやすいことばで、丁寧な説明を書いておくとどんなときの動作を想定していて、テストがこけたときもどんな条件の時にテストが通らなくなったかがわかりやすくなる。 ここで説明をしっかり記述しておけば、itでのかく値のチェックに対する説明はデフォルトの出力に任せることができるの良い。

すっきりするんじゃないかと思っているサンプルコード

describe "hoge" do
  bofore do
    get "index" , value
  end
  context "範囲内に収まるパラメータがくる" do
    let (:value) { 123 }
    it { response.should eq true }
  end
  context "範囲内に収まっていないパラメータがくる" do
    let (:value) { 123456 }
    it { response.should eq false }
  end
end

letを使用してテスト条件をわかりやすくするサンプル

letって使うと効果的だと思われるサンプル



Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment