如何将消息附加到rspec检查?

在rspec中:我是否可以像在xUnit样式testing框架中一样将消息附加到检查中? 怎么样?

assert_equal value1, value2, "something is wrong" 

should并且should_not should采取覆盖匹配器的默认消息的第二个参数( message )。

 1.should be(2), 'one is not two!' 

默认的消息通常是非常有用的。

更新:

对于RSpec 3:

 expect(1).to eq(2), "one is not two!" 

在RSpec中,匹配者的工作是打印一个明智的失败信息。 与RSpec一起提供的通用匹配器显然只能打印通用的非描述性失败消息,因为他们不知道有关您的特定域的任何信息。 这就是为什么build议您编写您自己的特定于域的匹配器,这会为您提供更多可读的testing和更多可读的故障消息。

下面是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 ,其他将自动生成。 然而,你的问题的整个观点当然是你喜欢默认消息,所以你至less还需要定义failure_message_for_should

而且,如果在正面和负面情况下需要不同的逻辑,则可以定义match_for_shouldmatch_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}"