トップ «前の日記(2008-12-18) 最新 次の日記(2008-12-25)» 編集

Route 477



2008-12-22

[rspec][rails] mock_modelでハマる

RSpec on Railsで

./script/generate rspec_scaffold (モデル名)

とかするとコードとテストが自動生成される。

んでですね、例えば rspec_scaffold Book とかやると

describe BooksController do

  def mock_book(stubs={})
    @mock_book ||= mock_model(Book, stubs)
  end
  
  ...

みたいなテストコードが生成されるんだけど、こいつは(見て分かるとおり)2回目以降はmock_modelを呼び出さないので、 引数に渡したstubsはまるっきり無視される。

このことに気づくのに数時間かかりました(´・ω・`) RSpec on Railsはもっとハマりにくいテストを自動生成すべき。

  def mock_book(stubs={})
    if @mock_book
      stubs.each{|k,v| @mock_book.stub!(k).and_return(v)}    
    else
      @mock_book = mock_model(Book, stubs)
    end
    @mock_book
  end

こんなんでいいかな?長いかなぁ。

というか引数ありのmock_bookをひとつのテストケースで二回以上使うのが間違ってるのかも…。