0

Railsでコントローラーの1つをテストするためにRspecテストを作成しようとしていますが、正しいparamsハッシュを取得するのに問題があります。

アクティビティコントローラのcreateメソッドは次のようになります(updateメソッドは同じです)。ご覧のとおり、受信するparamsハッシュには、:activity、:start_time、および:end_timeハッシュがあります。

def create
  @activity = Activity.new(params[:activity])
  @activity.start_time = to_interval(params[:start_time])
  @activity.end_time = to_interval(params[:end_time])
  respond_to do |format|
....

rspecアクティビティコントローラーの仕様は次のようになります

  it "redirects to the activity" do
    activity = Activity.create! valid_attributes
    put :update, :id => activity.id, :activity => valid_attributes
    response.should redirect_to(activity)
  end

2行目は有効な属性を呼び出します

def valid_attributes
  FactoryGirl.attributes_for(:activity)
end

ハッシュを返します

{"id"=>"1", "name"=>"Some Activity1"}

コントローラがそれを受信すると、ハッシュは次のようになります。

{"activity"=>{"id"=>"1", "name"=>"Some Activity1"}, "controller"=>"activities", "action"=>"create"}

ご覧のとおり、:start_timeと:end_timeのハッシュがありません。結局、私は次のようなハッシュが必要です

{"activity"=>{"id"=>"1", "name"=>"Some Activity1"}, "start_time"=>{"hours"=>"1", "minutes"=>"0"}, "end_time"=>{"hours"=>"1", "minutes"=>"0"}, "controller"=>"activities", "action"=>"create"} 

:start_timeハッシュと:end_timeハッシュをparamsハッシュに追加するための正しい構文がわかりません。createメソッドは3つのハッシュを以下の形式に結合するため、FactoryGirlから返されたハッシュと組み合わせることができません。これは、:start_timeと:end_timeが:activitiesハッシュに埋め込まれているため、正しくありません。

{"activity"=>{"id"=>"1", "name"=>"Some Activity1", "start_time"=>{"hours"=>"1", "minutes"=>"0"}, "end_time"=>{"hours"=>"1", "minutes"=>"0"}}, "controller"=>"activities", "action"=>"create"}

どんな助けやヒントもありがたいです、そして私はあなたの時間と助けに感謝します!!

4

1 に答える 1

0

あなたのコードに奇妙なものがあります。しようとしてput :updateいますが、 create アクションを見ています (これは問題の原因となる可能性もあります。 create アクションのテストには既にパラメーターが含まれている可能性があります。)

あなたの質問では、これを実行して start_time および end_time パラメータを渡すことができるはずです

put :update, :id => activity.id, :activity => valid_attributes, :start_time => { :hour => 1, :minute => 2 }, :end_time => { :hour => 1, :minute => 2 }
于 2013-03-03T04:56:31.057 に答える