在测试中模拟嵌套参数

Simulating nested params in tests

我需要在测试中模拟发送参数,与这些输入将发送的相同:

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

测试看起来像这样:(使用 Test Unit,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

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

"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}