我正在爲我的模型的更新函數之一編寫Rspec控制器測試。我正在測試的模型是Order
。對PUT方法正確運行Rspec控制器測試
當我運行控制器測試時,我看到order_attributes現在沒有更新。
下面是order_controller.rb:
before_action :set_order, only: [:show, :edit, :update, :destroy]
def update
if @order.update(order_params)
render json: @order, status: :ok, location: @order
else
render json: @order.errors, status: :unprocessable_entity
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_order
@order = Order.find(params[:id])
end
def order_params
params.permit(:order_type)
end
end
控制器規範我就像是以下幾點:
let(:order) {
FactoryGirl.create(:order)
}
describe "PUT #update" do
context "valid attributes" do
it "changes order's attributes" do
put :update, id: order.id, order_params: FactoryGirl.attributes_for(:order, user_id: 19)
order.reload
expect(assigns(:order).user_id).to match(order.user_id)
end
end
end
這裏是FactoryGirl訂貨型號:
require 'faker'
FactoryGirl.define do
factory :order do
order_type Order.order_types[:serviceA]
association :user
before(:create) do |order|
order.user = FactoryGirl.create(:user)
end
end
end
在控制器測試,我看到order_attributes沒有更新。即使我將user_id更新爲19,也不會反映出來。我是否以錯誤的方式傳遞了order_params?
你的'order_params'方法在控制器中看起來像什麼? –
@ChrisPeters,我已更新。 – JoHksi