在测试中模拟嵌套参数

时间:2015-06-28 23:21:41

标签: ruby-on-rails ruby testing tdd bdd

我需要模拟在测试中发送参数,就像这些输入发送一样:

<input id="quantity" name="quantities[9671]" type="number" value="1" />
<input id="quantity" name="quantities[9822]" type="number" value="1" />

测试看起来像这样:(使用测试单元,Rails中的默认测试框架):

test "placing item into basket"
  cart = Cart.new(session)

  post :create,
    product_variant_ids: [@product.variants.first.id],
    "quantities[#{@product.variants.first.id}]" => 1 # <<<------ not working 

  assert_equal 1, cart.items.count
end

1 个答案:

答案 0 :(得分:1)

如果您将输入参数指定为:

"quantities[123]" => 1

您必须稍后在控制器上使用以下方式访问它:

params["quantities[123]"]

通常输入如下:

<input id="quantity" name="quantities[9671]" type="number" value="1" />

将作为嵌套哈希在您的参数中提供。对于上述情况,它将是:

params["quantities"]["9671"]

所以在你的情况下,如果你像这样传递它应该有效:

quantities: {@product.variants.first.id => 1}