私のモデルのアップデート機能の1つで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