On Sep 24, 2010, at 1:29 PM, GregD wrote: > Hi all, > > Newbie here and I'm using rspec with jruby to test a java class, but > this is more of a rspec question. > > I have a java HashMap object and want to make sure a key exists. I > have this as my test: > > context :toHashMap do > subject { @var_list.toHashMap } > > it { should satisfy{|a| a.contains_key?(var1) } } > it { should satisfy{|a| a.contains_key?(var2) } } > it { should satisfy{|a| a.contains_key?(var3) } } > end > > @var_list is set to another java object that has a method toHashMap > that returns > a HashMap. var1, var2 and var3 are set using let(:var1), etc. If the > one of > these fails, I get this telling me that I need to supply a description > method: > > 'Java::LibraryLanguage::XmlVariableList when added duplicate variables > with different values toHashMap should 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. > ' FAILED > expected {var01=2, var02=this-is-a-string} to satisfy block > <<<<<<< > > > I'd like to put 'contain the key <blah>' in place of 'When you call a > matcher in > an example without a String' > > Where do I put that string? I thought I could just do: > > it "should contain the key #{var1}" { should satisify{|a| > a.contains_key?(var1) > } } > > But, the loading complains on that. Where can a put a custom > description into > this code (easily/polite way).
Congratulations - you're apparently the first person to ever use the satisfy matcher with an implicit subject, and have uncovered a bug! http://github.com/rspec/rspec-expectations/issues/issue/20 I'd recommend not using that satisfy matcher for this case though, as it's really intended to be more of a last resort, and you can do much better with a custom matcher: RSpec::Matchers.define :contain_key do |key| match do |subject| subject.contains_key?(key) end end Then you can say: context :toHashMap do subject { @var_list.toHashMap } it { should contain_key(var1) } it { should contain_key(var2) } it { should contain_key(var3) } end More info on custom matchers: http://github.com/rspec/rspec-expectations/blob/master/features/matchers/define_matcher.feature HTH, David
_______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users