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をひとつのテストケースで二回以上使うのが間違ってるのかも…。