Rspec matcher не использует пользовательское сообщение об ошибке - PullRequest
1 голос
/ 21 апреля 2011

У меня есть пользовательский сопоставитель:

RSpec::Matchers.define :have_value do |attribute, expected|
  match do |obj|
    obj.send(attribute) == expected
  end 

  description do
    "have attribute #{attribute} with value #{expected}" 
  end
end

И это пример того, как я его использую:

context "description" do
        subject { create_obj_from_file(file_name) }
        h = {
            :attribute1 => 6,
            :attribute2 => 3,
            :attribute3 => "PL" }
        }
        h.each do |k,v| it { should have_value k, v} end
    end

Это мои тесты выполняются правильно. Но когда я получаю сообщение об ошибке, это не пользовательская ошибка, а "ожидается, что {массовый дамп объекта} будет иметь значение: атрибут и значение". Есть идеи относительно того, что я делаю неправильно?

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Спасибо за использование моего кода в ответ на ваш последний вопрос. Вот что вам нужно для этого примера:

  failure_message_for_should do |obj|
    "should have value #{expected} for attribute #{attribute} but got #{obj.send(attribute)}" 
  end


  failure_message_for_should_not do |obj|
    "should not have value #{expected} for attribute #{attribute} but got #{obj.send(attribute)}" 
  end
1 голос
/ 21 апреля 2011

Вам необходимо указать пользовательские сообщения об ошибках. Пример из вики :

RSpec::Matchers.define :be_a_multiple_of do |expected|
  match do |actual|
    actual % expected == 0
  end

  failure_message_for_should do |actual|
    "expected that #{actual} would be a precise multiple of #{expected}"
  end

  failure_message_for_should_not do |actual|
    "expected that #{actual} would not be a precise multiple of #{expected}"
  end

  description do
    "be a precise multiple of #{expected}"
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...