Hello,
I have a class that takes callbacks and stores them for later use. It supplies
a default block for all the other methods to use, and you can set a new default
if you like. I want to check that the new default is being set and that it's
the same block as the one given. When I try and spec this, however, I get the
following message:
> When you call a matcher in an example without a String, like this:
specify { object.should matcher }
or this:
it { should matcher }
RSpec expects the matcher to have a #description method. You should either
add a String to the example this matcher is being used in, or give it a
description method. Then you won't have to suffer this lengthy warning again.
The code is as like this:
DEFAULT_BLOCK = ->(klass,field){
->(term) {
klass.filter(field.to_sym =>
/#{term}.*/i).select(Sequel.as(field,"value"))
}
}
def default_suggester=(block)
@default_block = block
end
def default_suggester
@default_block ||= DEFAULT_BLOCK
end
and the spec I had that gave that message:
describe "Adding a default suggester" do
include_context "All pages" # this loads the Sinatra app the code runs in
and puts it in a variable called "app".
let(:my_default) { ->(klass,field) {
->(term) {
klass.filter(
Sequel.like(field.to_sym, "#{term}%")
).select(Sequel.as(field,"value"))
}
}
}
context "When given a new default suggester" do
before :all do
app.suggesters.clear
app.default_suggester = my_default
end
it "should be a lambda/proc" do
app.default_suggester.should respond_to? :call
end
it "should be the same as my_default" do
app.default_suggester.should.equal? my_default
end
after :all do
app.suggesters.clear
end
end
end
It appears to me that because it's a lambda that RSpec thinks it's a matcher?
Is there a way to change this to do what I intend?
Any suggestions or help would be much appreciated. I'm running Ruby v1.9.3-p194
and RSpec 2.11.0
Regards,
Iain
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users