2011-07-18 75 views
1

我正在使用帶有rails的黃瓜,並且正在檢查元素的父元素是否具有某個類。我發現了這個代碼,但它不起作用。順便說一句,我正在使用水豚。提前致謝!黃瓜,如何檢查父母是否有某個班級?

Then the element "([^"]*)" with parent "([^"]*)" should have class "([^"]*)" do |element_id,parent,css_class| 
    response.should have_selector "#{parent} .#{css_class}" do |matches| 
    matches.should have_selector element_id 
    end 
end 

回答

2

從技術上講,這不是真正的你應該用黃瓜進行測試的方式。黃瓜是用於測試行爲,而不是檢查DOM - 儘管它當然可以以這種方式使用。

如果你真的想要寫這樣的事情,你可以做簡單得多:

Then /^the element "([^"]*)" with parent "([^"]*)" should have class "([^"]*)"$/ do |element_id,parent,css_class| 
    page.should have_css("#{parent}.#{css_class} #{element_id}") 
end 

這很爛在許多層面上,雖然。您不僅直接從步驟中檢查DOM,這會產生非常不可讀的功能,而且會混合傳遞元素名稱,類名稱和元素ID - 每種樣式都有稍微不同的樣式......在此步驟中,元素可以可以是任何類型的選擇器,而父類和css_class則更加固定 - 它們必須始終「適合」選擇器字符串或不會找到任何內容。

我還沒有真正解釋得那麼好,但簡而言之,您應該考慮您實際嘗試測試的內容,並考慮是否可以將其重命名爲更有用且可重用的內容。你能否重新使用這一步驟而不考慮它的實現來找出哪裏發生了什麼?

此外,隨着更具表現力的命名,測試立即變得更有用。例如,步驟Then I should see the current list is activeThen the element "li.active" with parent "ul" should have class "active-list"更具可讀性和表現力。具體在步驟定義實施中,而不是您的功能!

閱讀此博客文章 - http://elabs.se/blog/15-you-re-cuking-it-wrong - 它應該給你一個關於如何寫出更好的步驟的好主意。

相關問題