代码之家  ›  专栏  ›  技术社区  ›  jhwist

RubyonRails单元测试中的字符串比较

  •  1
  • jhwist  · 技术社区  · 15 年前

    我的RubyonRails单元测试在一个简单的字符串比较中失败了,我无法找出原因。

    在模型中 TestItem ,我有

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

    其中,数据是由 Net::HTTP::post 请求。数据看起来不错,如果我输出 @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上有Rails2.3.4和Ruby1.8.6(不要让我开始)。

    2 回复  |  直到 15 年前
        1
  •  1
  •   MBO    15 年前

    这两个看起来是一样的,但你只能在 #inspect . 您应该检查编码和二进制表示(如果是Ruby1.9),也许这就是问题所在。

        2
  •  0
  •   jhwist    15 年前

    由于MBO让我找到了正确的方向,下面是解决方案:

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

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

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