我正在为我的模型的更新函数之一编写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