Ruby on rails 利用rspec和水豚动态添加蚕茧试验场

Ruby on rails 利用rspec和水豚动态添加蚕茧试验场,ruby-on-rails,rspec,capybara,cocoon-gem,Ruby On Rails,Rspec,Capybara,Cocoon Gem,我想知道是否有人测试cocoon动态添加的字段 这大大节省了时间,但所有动态添加的字段都在ID和名称中添加了很长的数字。这意味着我必须跳过需要页面上多个(一组)字段的测试。可能使用all、first和选择器输入。大概是这样的: visit new_resource_path click_link "Add a Nested Resource" first("input[name='nested_resource[name]']").set("Nested Resource") click_but

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

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

可能使用all、first和选择器输入。大概是这样的:

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


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

您可以测试两件事:

  • 嵌套元素的动态添加是否有效
  • 创建元素、填充元素并将其存储在数据库中
因此,假设视图的相关部分如下所示(默认示例):

您的嵌套元素如下所示

.nested-fields
  = f.input :description
  = f.input :done, :as => :boolean
  = link_to_remove_association "remove task", f 
所以通常你给它一个类,我通常只测试页面上元素的数量

因此,如果已经存在一个元素,正在创建一个新元素,那么计数应该是两个。你可以用它来测试

 find("#tasks .nested-fields").count.should == 2
在填充新添加的嵌套元素时,可以使用
:last child
css选择器

 find("#tasks .nested-fields:last-child input#description").set("something")

名称和id的形成方式与rails内部结构非常接近,因此我尽量避开它们。

我刚才使用的一种可能的替代方法是动态更新每个添加表单字段的标签(使用中提到的技术)现在,我的Cucumber/Capybara测试可以很容易地将文本插入到不同的多表单字段中,通过它们拥有的不同标签来区分它们


关于我在这次公关活动中所做工作的全部细节

谢谢你,我在过去确实遇到过这些发现者,但没有看到他们在上下文中被使用。另外,值得一提的是,如果使用webkit,可能需要添加一个小的
sleep
,以允许JS在查找元素之前加载元素。问题并不完全清楚:您想测试字段是否存在?你想设置场地吗?嘿,内森,谢谢你的宝石!我只是在努力定位由它动态生成的任何东西,因为这些元素有很长的数字。例如,单击add fields(添加字段)会在刷新时显示类似于
的内容,这些内容会被设置为ActiveRecord对象中的索引,但不清楚如何查找已添加到Fly上的元素。我通常使用count,I count来查看是否已添加(或删除)了新的子项,使用css选择器,您可以很容易地找到第二个(第n个)关联。出于好奇,数字对应于什么?对不起,我不明白这个问题?再次感谢Nathan,这无疑会在将来帮助我很多次。您的答案谈到
:last
,但使用
:last child
。在我的例子中,
:last
似乎有效,而
:last child
无效。奇怪:last child是正确的css选择器,而imho:last不存在?你在使用哪个驱动程序?@nathanvda我在使用Google Chrome.Ah-可能JavaScript控制台中JQuery语句中有效的内容对于Capybara中的
find
调用无效。但是我仍然对你在文本中使用
:last
和代码中使用
:last child
感到困惑。
 find("#tasks .nested-fields").count.should == 2
 find("#tasks .nested-fields:last-child input#description").set("something")