0

私の仕様では、以下の POST リクエストを実行すると、すべて正常に動作します。

    before do
      request_payload = {
        player: {
          first_name: "Joe",
          last_name: "Carradine",
          team_id: "1"
        }
      }

      post :create, request_payload
    end

しかし、PUT の仕様を実行すると:

    before do
      request_payload = {
        player: {
          first_name: "Buck",
          last_name: "Carradine",
          team_id: "1"
        }
      }

      put :update, { id: 3 }, request_payload
    end

次のようなエラーが表示されます。

 Failure/Error: put :update, { id: 1 }, request_payload
 NoMethodError:
   undefined method `[]' for nil:NilClass

何がゼロと見なされているのかわかりません。この API 呼び出しは、REST クライアントで正常に機能します。

これは、以前の SO の質問に基づく別のエラーです: PUT の RSpec でエラーを受信して​​いますが、POST ではありません

4

2 に答える 2

2

やったほうがいい :

put :update, { id: 3 }.merge(request_payload)
于 2012-10-23T15:39:49.080 に答える
0

私はそうしています:

describe 'PUT #update' do

before do

  @todo = FactoryGirl.create(:todo)

  @initial_title = @todo.title
  @initial_updated_at = @todo.updated_at
  @new_title = 'Title Changed'

  request_payload = { :title => @new_title }

  put :update, :id => @todo.id, :todo => request_payload, :format => :json

  @todo.reload

end

it 'should retrieve status code of 204' do
  response.status.should eq(204)
end

it 'updated attributes should not be as initially' do
  @todo.title.should_not eq(@initial_title)
  @todo.updated_at.should_not eq(@initial_updated_at)
end

it 'updated attribute should be the the same' do
  @todo.title.should eq(@new_title)
end

it 'updated date should be increased' do
  @todo.updated_at.should > @initial_updated_at
end


end

同様のテストを行う方法、誰かにとってさらに役立つかもしれません;)

于 2014-03-17T20:33:01.247 に答える