2012-07-31 77 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