Сравнение строк в модульном тесте Ruby on Rails - PullRequest
1 голос
/ 01 декабря 2009

мой юнит-тест Ruby On Rails не выполняется при простом сравнении строк, и я не могу понять, почему.

В модели TestItem, у меня

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

где данные - это xml-строка, возвращаемая запросом Net::HTTP::post. Данные выглядят хорошо, и если я выведу @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">.

Я в недоумении, откуда взялась эта ошибка, так как строка выглядит идентично мне. Для чего это стоит, это с рельсами 2.3.4 и ruby ​​1.8.6 на Windows (не заводите меня).

Ответы [ 2 ]

1 голос
/ 01 декабря 2009

Эти два кажутся идентичными, но вы видите их представление только после #inspect. Вам следует проверить кодировку и двоичное представление (если это Ruby 1.9), возможно, в этом проблема.

0 голосов
/ 01 декабря 2009

Поскольку MBO подтолкнуло меня в правильном направлении, вот решение:

Для отладки я добавил p @bugtitle.class в код модели, который показал, что @bugtitle был REXML::Text экземпляром. Правильный код модели:

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

С этой модификацией юнит-тест завершается без сбоев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...