2009-12-01 121 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