有人能告诉我一个使用rspec使用failure_message_for_should的例子吗?

时间:2009-10-27 16:27:39

标签: ruby-on-rails rspec

我正在尝试从期望中返回更多信息性的失败消息。我有一个辅助方法迭代哈希,测试模型上的质量分配保护。如果期望失败,我想输出哪个属性失败。我遇到过failure_message_for_should,但我不确定如何正确使用它。

谢谢!

2 个答案:

答案 0 :(得分:1)

只需编写一个简单的匹配器,然后就可以指定自己的消息了。看看这段代码:

def be_even
 simple_matcher("an even number") { |given| given % 2 == 0 }
end

describe 2 do
 it "should be even" do
  3.should be_even
 end
end

将此代码放在名为so_spec.rb的文件中,并按以下方式运行:

spec so_spec.rb -f n -c

这将为您提供以下输出:

'2 should be even' FAILED
expected "an even number" but got 3

你可以很容易地看到“偶数”真的是自定义消息,并且比预期真实的假信息更多。这是一种方法。但是,rspec非常灵活,您可以像BJ Clark所说的那样编写自己的自定义匹配器,它会为您提供更大的灵活性。我使用了自定义和简单的匹配器,有时候简单的匹配器就足够了。您可以通过不同的方式选择一个适合您需求的方式。

答案 1 :(得分:0)

failure_message_for_should不是匹配器,如果您正在编写自己的自定义匹配器,它是一种覆盖的方法。我不认为它能满足您的需求。