0

通常、コントローラーの仕様では、次のようにします。

describe MyController do
  describe 'POST #create' do
    let!(:my_model) { initialize_something_here }

    before :each do
      post :create, my_model: my_model
    end

    it 'should be successful' do
      response.should be_successful
    end

    ... more tests ...
  end
end

私の質問は、expectデータベース内のアイテムの数が の後にインクリメントされていることを確認するなど、ブロックを使用するアサーションを行う場合、次のようにブロックから呼び出しcreateを削除し、ステートメントごとに繰り返す必要があるということです。postbefore :eachit

describe MyController do
  describe 'POST #create' do
    let!(:my_model) { initialize_something_here }

      it 'should insert into database' do
        expect { post :create, my_model: my_model }.to change(MyModel, :count).by(1)
      end

      it 'should be successful' do
        post :create, my_model: my_model
        response.should be_successful
      end

      ... more tests ...
    end
  end

post通話を行う DRY-er の方法はありますか?

4

1 に答える 1

2

おそらくletでラムダを使用できると思います

  let(:post_create_model) { -> { post :create, my_model }}

  it 'should insert into database' do
     expect(post_create_model).to change(MyModel, :count).by(1)
  end

  it 'should be successful' do
    post_create_model.call
    response.should be_successful
  end
于 2013-01-18T23:47:03.873 に答える