rails rspec测试嵌套的创建操作

时间:2014-11-27 18:39:50

标签: ruby-on-rails testing rspec

有人可以帮我弄清楚如何测试嵌套的创建动作。

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。任何人都可以看到问题是什么?

谢谢

1 个答案:

答案 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])