2012-07-31 80 views
1

我建立的用户列表,发送电子邮件到,被编码为(HAML,尽管这不是重点)Rails的:水豚,复选框和IDS

- @users.each do |user| 
    .field< 
     = check_box_tag "user_ids[#{user.id}]",user.id 
     %nbsp 
     = user.name 

的代码工作正常(虽然它可能会被重构)。但是,由于对象id随时间而改变,所以我在编写Capybara测试时遇到了问题。举例来说,我有以下黄瓜测试:

..... 
Given user "User one" exists 
And "User two" esists 
...... 
When I check "user_ids_152" 
And I check "user_ids_153" 
..... 

我得到 水豚:: ElementNotFound:不能检查现场,与ID,名称或标签“user_ids_152”没有复选框发现

,因为用户ID是现在是272.我在SO搜索并找不到合适的解决方案。

对此提出建议?

回答

1

我不知道你的要求,但增加了对您的复选框的HTML标签,将使其更容易通过持续检查水豚:

%label{ :for => "user_ids_#{user.id}"} 
    = check_box_tag "user_ids[#{user.id}]",user.id, :id => "user_ids_#{user.id}" 
    = user.name 

然后,你可以这样做:

When I check "User one" 

我应该补充一点,你编写格式良好,符合标准的HTML越多,从长远来看,使用Capybara之类的东西越容易。如果您使用它们,rails视图助手会很好地帮助您,但请注意您在其外部生成的任何HTML。

我喜欢防弹网页设计作为一个底漆:

http://www.simplebits.com/publications/bulletproof/

+0

是的,它工作正常!我不得不将(bootstrap)表单样式更正为“表单水平”,否则我会在一行上显示复选框,而在另一行上显示标签。 – piffy 2012-07-31 22:13:53