RSpec で transaction のテスト

投稿者 okkez 2008-08-03 15:36:00 GMT

Yuya さんのヒントをもとにしてこんな風にしてみました。

sqlite3? は spec_helper に定義した。ヘルパーメソッド。 SQLite3 だとトランザクションの入れ子が出来なかった(例外が発生する)のでこうしてます。

一応 should_not_receive で特定の処理から先には進んでないことは確認しているし、 エラーメッセージも確認しているのでこれでテストとしては良さそう。

あとは、実装コードの最初の方で呼んでる処理をモック化すればいいと思う。

これをモック化すると、通しのテストはどうすればいいのだろう、というのが今の疑問。

describe BatchController do
  describe "POST create" do
    describe "by login user" do
      describe "when posted data was invalid (subject)" do
        before do
          Question.should_not_receive(:create!)
          Choice.should_not_receive(:create!)
          unless sqlite3?
            ActiveRecord::Base.connection.should_receive(:rollback_db_transaction)
          end
        end
        before do
          login_as :quentin
          post :create, :batch => { :body => INVALID_DATA_WITHOUT_TITLE }
        end
        it "should have error message" do
          flash[:error].should == 'invalid data.'
        end
        it "should redirect to 'subject/index'" do
          response.should redirect_to(subjects_path)
        end
      end
    end
  end
end

カテゴリ ,  | タグ  | コメントなし | トラックバックなし

コメント

トラックバック

トラックバックリンク:
http://typo.okkez.net/trackbacks?article_id=67

コメントは許可されていません