使用rspec和capybara通过cocoon动态添加测试字段

Daz*_*win 6 rspec ruby-on-rails capybara cocoon-gem

我想知道是否有人测试由cocoon动态添加的字段?

这是一个很好的节省时间,但动态添加的所有字段都有很长的数字添加到ID和名称.这意味着我必须跳过在页面上需要多个(一组)字段的测试.

nat*_*vda 8

Afaik你可以测试两件事:

  • 嵌套元素的动态添加有效
  • 创建元素,填充它们并将它们存储在数据库中

因此,假设视图的相关部分如下所示(默认示例):

#tasks
  = f.semantic_fields_for :tasks do |task|
    = render 'task_fields', :f => task
  .links
    = link_to_add_association 'add task', f, :tasks
Run Code Online (Sandbox Code Playgroud)

你的嵌套元素看起来像

.nested-fields
  = f.input :description
  = f.input :done, :as => :boolean
  = link_to_remove_association "remove task", f 
Run Code Online (Sandbox Code Playgroud)

所以通常你给它一个类,我通常只是测试页面上元素的数量.

因此,如果一个元素已经存在,创建一个新元素,则计数应为2.你可以测试一下

 find("#tasks .nested-fields").count.should == 2
Run Code Online (Sandbox Code Playgroud)

填写新添加的嵌套元素,您可以使用:last-childcss选择器

 find("#tasks .nested-fields:last-child input#description").set("something")
Run Code Online (Sandbox Code Playgroud)

如何形成名称和id,靠近rails内部,所以我试图远离那些.


Arm*_*ndo 4

也许首先使用水豚查找器和选择器输入。像这样的东西:

visit new_resource_path
click_link "Add a Nested Resource"
first("input[name='nested_resource[name]']").set("Nested Resource")
click_button "submit"
Run Code Online (Sandbox Code Playgroud)

或者

visit new_resource_path
click_link "Add a Nested Resource"
click_link "Add a Nested resource"
all("input[name='nested_resource[name]']").each do |input|
  input.set("Nested Resource")
end
click_button "submit
Run Code Online (Sandbox Code Playgroud)

这只是一种方法,我从未使用过 cocoon。然而,这是一种测试动态输入的形式。