1

我正在尝试做一些 Rails 集成测试。

我有一个几乎就在表单助手的 Rails 指南中的案例。

我的 HTML 包含:

    <input name="to_org[][str2int]" value="1" type="checkbox">
    <input name="to_org[][str2int]" value="2" type="checkbox">
    <input name="to_org[][str2int]" value="3" type="checkbox">

该应用程序在 Rails 3.2.2 上运行良好。

现在我想写一个集成测试。我需要以与我的 JavaScript 相同的方式发布数据。我想指出选择了“to_org[]”值 1 和 2。假设 form_url 是一个正确设置的值。

    post( form_url, { "to_org[][str2int]" => ???WHAT_GOES_HERE??? } )

发布后,我期待参数保持:

    "to_org" => [ {"str2int" => "1"}, {"str2int" => "2"} ]

我尝试了很多不同的东西,浏览了指南,谷歌搜索。

没有人试图发布多个复选框被选中的结果吗?我认为答案并不明显。

如何在集成测试中设置 post() 的参数以使其工作?

PS:正如人们可能猜到的那样,我有一个识别“str2int”的过滤器,并通过对应用程序进行适当的检查和错误恢复来进行转换。最终我的应用程序看到 :to_org = [ 1, 2 ]。

4

1 回答 1

1

基本上,我对 Rails 代码进行了一些挖掘(很高兴看到它制作 API 文档。)

一个正确的答案是:

    post( form_url, { "to_org" => [ { "str2int" => "1" }, { "str2int" => "2" } ] } )

最有帮助的是发现 to_param() 函数,如下所示:

    { "to_org" => [ { "str2int" => "1" }, { "str2int" => "2" } ] }.to_param()

这使我能够推断出我必须改变我用作名称的名称才能正确传递通过 post() 的值。

Rails 之神:有没有更好的方法来做到这一点?应该说的更多?

于 2012-06-13T19:40:42.637 回答