更新は別インスタンスで行われてるからだ。言われてみれば確かにそうだ。
controller/lists_controller.rb
def stock
return redirect_to '/404.html' unless request.xhr?
@list = List.find(params[:id])
if @list.is_stocked?
@list.is_stocked = false
else
@list.is_stocked = true
end
respond_to do |format|
if @list.save
format.js { @list }
else
format.js { render :action => "alert/error" }
end
end
end
これだとテストに失敗する
functional/lists_controller_test.rb
test "is_stockedを更新する" do
xhr :get, :stock, :id => @stock_flag_is_true.id
assert_equal false, @stock_flag_is_true.is_stocked
assert_response :success
end
別インスタンスで更新した内容をインスタンスに反映させるため、 reload
を追加しなければいけない
functional/lists_controller_test.rb
test "is_stockedを更新する" do
xhr :get, :stock, :id => @stock_flag_is_true.id
assert_equal false, @stock_flag_is_true.reload.is_stocked
assert_response :success
end
同じようにハマってる方がいた。