【问题标题】:String comparison in Ruby on Rails unit-testRuby on Rails 单元测试中的字符串比较
【发布时间】:2009-12-01 09:36:24
【问题描述】:

我的 Ruby On Rails 单元测试在简单的字符串比较中失败,我不知道为什么。

在模型TestItem中,我有

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

其中 data 是 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

令人惊讶的是(至少对我而言)测试失败并显示以下输出(从 shell 逐字复制):

  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(不要让我开始)。

【问题讨论】:

    标签: ruby-on-rails ruby unit-testing string


    【解决方案1】:

    这两个看起来相同,但您只能在#inspect 之后看到它们的表示。您应该检查编码和二进制表示(如果是 Ruby 1.9),也许这就是问题所在。

    【讨论】:

    • 感谢您将我指向#inspect,这本身并没有帮助,但让我很好奇。请参阅我的答案以获取解决方案。
    【解决方案2】:

    既然 MBO 把我引向了正确的方向,这里就是解决方案:

    为了调试,我在模型代码中添加了一个p @bugtitle.class,这表明@bugtitle 是一个REXML::Text 实例。正确的型号代码是:

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

    通过该修改,单元测试可以顺利完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 2019-06-20
      • 2013-10-23
      • 1970-01-01
      相关资源
      最近更新 更多