2011-09-29 46 views
5

我正在寫一個使用testunit 2.4.0的rails 3.1應用程序的控制器測試。ArgumentError:斷言消息必須是字符串或PROC使用assert_select

我想斷言某個標題沒有出現在頁面上。

我使用assert_select這樣的:

assert_select 'h1', {:text => /Key Dates/, :count => 0} 

,並得到以下錯誤:

ArgumentError: assertion message must be String or Proc: <</Key Dates/> 
expected but was <"Planner Maternity leave">.>(<Test::Unit::Assertions::AssertionMessage>) 

我跟蹤下來到assert_select電話build_message它創建的實例的事實AssertionMessage並將其傳遞給測試單元的assert。然而,在testunit版本2.2(2011年2月)中添加了檢查傳入的消息類型的檢查。這些檢查觸發上面看到的ArgumentError

我不確定錯誤在於測試單元是否過度嚴格或者assert_select是否傳遞了錯誤的對象類型。

你能建議如何最好地遵循這個?任何解決方法?

+0

是問題那''text'中的值應該是一個字符串,而不是一個模式? – jefflunt

+0

嗨,不,這是完全可以接受的:文本是一個正則表達式 – heathd

回答

0

所以,assert_select documentation顯示下面的例子中,傳遞一個塊:

assert_select "ol" do |elements| 
    elements.each do |element| 
    assert_select element, "li", 4 
    end 
end 

所以,如果它發現模式,如果你不喜歡的東西......

assert_select 'h1' do |elements| 
    elements.length == 0 ? fail 
    elements.each do |element| 
    element.text ~= /Key Dates/ ? fail 
    end 
end 

這基本上失敗或者如果h1元素的數量爲零。顯然你會改變條件來匹配你想要測試的東西,但是這會讓你更接近你需要的東西嗎?

0

如果您不能升級到無缺陷的版本,你可以傳遞第三個參數(消息),所以你不要逼消息建:

assert_select 'h1', {:text => /Key Dates/, :count => 0}, "Unexpected Key Dates found."

相關問題