On Nov 24, 2010, at 11:09 PM, 白井 薫 wrote:
> I have a question about the custom matcher using Matcher#define.
>
> My intention is given by the following code:
>
> ========================================================================
> Spec::Matchers.define :be_done do
> match do |block|
> block.call
> true
> end
This should work:
match do |block|
begin
block.call
true
rescue
false
end
end
Or, if you prefer one liners:
match do |block|
(block.call; true) rescue false
end
HTH,
David
>
> failure_message_for_should do
> "be_done failed."
> end
> end
>
> describe "The expectation failure in block called from the custom matcher" do
> example "should be reported." do
> lambda {
> lambda {
> 1.should == 2
> }.should be_done
> }.should_not raise_error(/be_done failed/) # should 'expected: 2, got: 1
> (using ==)'
> end
> end
> ========================================================================
>
> I want to define the custom matcher that it calls the block given as the
> actual value, like raise_error.
> But if the expectation in the given block failed,
> it is not reported, but it reports the custom matcher's failure.
>
> Is there some misuse about Matchers.define in my code?
>
> Best Regards.
> --
> Kaoru Kobo
>
> _______________________________________________
> rspec-users mailing list
> [email protected]
> http://rubyforge.org/mailman/listinfo/rspec-users
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users