В rspec: Могу ли я присоединить сообщение к проверке так же, как я бы сделал в инфраструктуре тестирования стиля xUnit? Как?
assert_equal value1, value2, "something is wrong"
В rspec: Могу ли я присоединить сообщение к проверке так же, как я бы сделал в инфраструктуре тестирования стиля xUnit? Как?
assert_equal value1, value2, "something is wrong"
should
и should_not
взять второй аргумент (message
), который переопределяет сообщение по умолчанию по умолчанию.
1.should be(2), 'one is not two!'
Сообщения по умолчанию обычно довольно полезны.
обновление:
для RSpec 3:
expect(1).to eq(2), "one is not two!"
В RSpec это задание сопряжения для вывода сообщения о разумном сбое. Общие шаблоны, которые поставляются с RSpec, могут, очевидно, печатать только общие сообщения об ошибках без описания, поскольку они ничего не знают о вашем конкретном домене. Поэтому рекомендуется писать собственные собственные спецификации для конкретных доменов, что даст вам как более читаемые тесты, так и более читаемые сообщения об ошибках.
Вот пример из документации RSpec:
require 'rspec/expectations'
RSpec::Matchers.define :be_a_multiple_of do |expected|
match do |actual|
(actual % expected).zero?
end
failure_message_for_should do |actual|
"expected that #{actual} would be a multiple of #{expected}"
end
failure_message_for_should_not do |actual|
"expected that #{actual} would not be a multiple of #{expected}"
end
description do
"be multiple of #{expected}"
end
end
Примечание: требуется только match
, остальные будут сгенерированы автоматически. Тем не менее, вся суть вашего вопроса, конечно, в том, что вам не нравятся сообщения по умолчанию, поэтому вам нужно, по крайней мере, также определить failure_message_for_should
.
Кроме того, вы можете определить match_for_should
и match_for_should_not
вместо match
, если вам нужна другая логика в положительном и отрицательном случае.
Как показывает @Chris Johnsen, вы также можете явно передать сообщение ожиданию. Однако вы рискуете потерять преимущества читаемости.
Сравните это:
user.permissions.should be(42), 'user does not have administrative rights'
с этим:
user.should have_administrative_rights
Это будет (грубо) реализовано следующим образом:
require 'rspec/expectations'
RSpec::Matchers.define :have_administrative_rights do
match do |thing|
thing.permissions == 42
end
failure_message_for_should do |actual|
'user does not have administrative rights'
end
failure_message_for_should_not do |actual|
'user has administrative rights'
end
end
В моем случае это была проблема скобок:
expect(coder.is_partial?(v)).to eq p, "expected #{v} for #{p}"
это привело к неправильному количеству аргументов, тогда как правильный способ:
expect(coder.is_partial?(v)).to eq(p), "expected #{v} for #{p}"