2009-12-01 88 views
1

我的Ruby On Rails單元測試在簡單的字符串比較中失敗,我找不到原因。Ruby on Rails中的字符串比較單元測試

在模型TestItem,我有

doc = REXML::Document.new(data) 
@bugtitle = doc.root.get_text("/bugzilla/bug/short_desc") 

,其中數據是由Net::HTTP::post請求返回一個XML字符串。數據看起來不錯,如果我輸出@bugtitle它包含預期的字符串。在我的單元測試,我有

test "bugtitle" do 
    ti = testitems(:one) 
    assert_equal("different RID folder for gating x-ray correction images",ti.bugtitle) 
    end 

令人驚訝的(至少對我來說)測試失敗與下面的輸出(從外殼逐字複製):

1) Failure: 
test_bugtitle(TestTest) [unit/testitem_test.rb:7]: 
<"different RID folder for gating x-ray correction images"> expected but was 
<"different RID folder for gating x-ray correction images">. 

我不知所措在這裏,這個錯誤來自哪裏,因爲字符串看起來和我完全一樣。對於它的價值,這是在Windows上使用rails 2.3.4和ruby 1.8.6(不要讓我開始)。

+0

哪個Ruby版本? – MBO 2009-12-01 10:03:02

回答

0

由於MBO戳我到正確的方向,這裏是解決方案:

對於調試,我加了一個p @bugtitle.class到模型的代碼,結果發現,這@bugtitle是一個REXML::Text實例。正確的型號代碼是:

doc = REXML::Document.new(data) 
@bugtitle = doc.root.get_text("/bugzilla/bug/short_desc").to_s 

通過該修改,單元測試完成而沒有失敗。

+0

您回答了您自己的問題,您可以將其標記爲已回答 – MBO 2009-12-01 14:13:07

+0

是的,在兩天內:) – jhwist 2009-12-01 14:14:33

1

這兩個看起來完全相同,但你只能在#inspect之後看到它們的表示。你應該檢查編碼和二進制表示(如果它是Ruby 1.9),也許這就是問題所在。

+0

謝謝你指點我#inspect,這本身並沒有幫助,但讓我好奇。看到我的答案爲解決方案。 – jhwist 2009-12-01 10:21:13