fail_message_for_should не работает - PullRequest
       20

fail_message_for_should не работает

1 голос
/ 13 февраля 2011

Я написал себе пользовательское средство сопоставления, которое само по себе работает нормально. Но failure_message_for_should не работает, я все равно получаю сообщение об ошибке по умолчанию. ...should_not работает!

Мое совпадение:

RSpec::Matchers.define :be_same_dom do |expected|
  match do |actual|
    assert_dom_equal(expected, actual)
  end

  failure_message_for_should do |actual|
    "Expected the same DOM as #{expected}, but got #{actual}"
  end

  failure_message_for_should_not do |actual|
    "Expected a different DOM than #{expected}"
  end
end

Сообщения об ошибках:


Failure/Error: helper.link_to("Dictionary", dictionaries_path).should_not be_same_dom('<a href="/dictionaries">Dictionary</a>')
       Expected a different DOM than <a href="/dictionaries">Dictionary</a>

Failure/Error: helper.link_to("Dictionary", dictionaries_path).should be_same_dom('<a class="x" href="/dictionaries">Dictionary</a>')
     MiniTest::Assertion:
       <"<a class=\"x\" href=\"/dictionaries\">Dictionary</a>"> expected to be == to
       <"<a href=\"/dictionaries\">Dictionary</a>">..
       Expected block to return true value.

1 Ответ

2 голосов
/ 14 февраля 2011

Я думаю, что здесь происходит то, что метод assert_dom_equal вызывает исключение вместо возврата false.RSpec перехватывает исключение и возвращает сообщение об исключении вместо сообщения соответствия.

Вы должны быть в состоянии перехватить это самостоятельно:

match do |actual|
  begin
    assert_dom_equal(expected, actual)
  rescue MiniTest::Assertion
    false
  end
end
...