有人可以帮我弄清楚如何测试嵌套的创建动作。
Controller.rb
def create
@itemline = V1::ItemLine.new(:net_price => params[:net_price])
@v1_product = @itemline.build_product(v1_product_params)
@v1_product.save
end
def v1_product_params
params.require(:v1_product).permit(:name, :net_price, :item_line => [:quantity, :net_price])
end
Controller_spec.rb
describe "with valid params" do
it "creates a new V1::Product" do
expect {
post :create, :v1_product => {name: "test", net_price: 10, item_line_id: 1 }, token: @user.api_key.token
}.to change(V1::Product, :count).by(1)
expect(V1::Product.last.name).to eq "test"
expect(V1::Product.last.net_price).to eq 10
expect(V1::Product.last.item_line_id).to eq 1 #FAILS
end
它确实创建了产品,但它没有构建V1 :: ItemLine.new。任何人都可以看到问题是什么?
谢谢
答案 0 :(得分:0)
从我的代码中看到
@itemline = V1::ItemLine.new(:net_price => params[:net_price])
不正确,因为:net_price嵌套在:v1_product hash
params.require(:v1_product).permit(:name, :net_price, :item_line => [:quantity, :net_price])
尝试
@itemline = V1::ItemLine.new(:net_price => params[:v1_product][:net_price])