多线期望RSpec测试断言?

时间:2010-11-01 12:01:37

标签: ruby-on-rails rspec rspec2

如何使用RSpec声明多行字符串? 我的期望如下:

it "should generate the correct header for the xml file" do
  xml_header = <<-XML
  <?xml version="1.0" encoding="utf-8"?>
  <FileSpec>
    <Header>
        <Version>1.0</Version>
        <DateTime>2010-10-17T10:41:18</DateTime>
        <Sequence>3</Sequence>
        <ClientID>QQWW</ClientID>
        <FileType>QQWW</FileType>
    </Header>
  </FileSpec>
  XML
  puts SomeXml.build_xml_header
  SomeXml.build_xml_header.to_s.should == xml_header
end

虽然输出符合预期,但测试因新行和制表符而失败。 如何在这种情况下断言?我认为==匹配器无法处理它。

Failure/Error: SomeXml.build_xml_header.to_s.should == xml_header
 expected: "    <?xml version=\"1.0\" encoding=\"utf-8\"?>\n    <FileSpec>\n    \t<Header>\n    \t\t<Version>1.0</Version>\n    \t\t<DateTime>2010-10-17T10:41:18</DateTime>\n    \t\t<Sequence>3</Sequence>\n    \t\t<ClientID>QQWW</ClientID>\n    \t\t<FileType>QQWW</FileType>\n    \t</Header>\n    </FileSpec>\n",
      got: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<FileSpec>\n  <Header>\n    <Version>1.0</Version>\n    <DateTime>2010-10-17T10:41:18</DateTime>\n    <Sequence>3</Sequence>\n    <ClientID>QQWW</ClientID>\n    <FileType>QQWW</FileType>\n  </Header>\n</FileSpec>\n" (using ==)

1 个答案:

答案 0 :(得分:2)

编辑:我没有像我应该那样仔细地查看XML。您的空白字符串案例似乎不匹配。一个有UTF-8,另一个有utf-8。如果你删除空格并使搜索大小写不敏感,它应该通过。

在rspec中进行此匹配可能有更好的方法,但为简单起见:

a.gsub(/\s/,'').downcase.should == b.gsub(/\s/,'').downcase