On Wed, Mar 5, 2008 at 12:28 PM, Rick DeNatale <[EMAIL PROTECTED]> wrote: > I'm wanting to write a spec that a model is applying an :order option > to a find call, but I don't want to completely specify all of the find > parameters. > > So I want to write something like this, say in a controller spec > > User.should_receive(:find).with(:all, hash_with_at_least(:order => > 'user.name ASC')) > get 'index', :sort => 'up' > > This ability to partially specify the contents of a hash argument > seems to be generally useful, particularly for Rails, and was > wondering if anyone had done this. I don't think it would be too hard.
And by the way, here's my sketch of how to do this, just looking not to reinvent the wheel: class HashWithAtLeast def initialize(aHash) @expected = aHash end def ==(other) @expected.each do |key, value| return false unless other[key] == value end true end def to_s "Hash with at least (@expected.inspect)" end end def hash_with_at_least(hash) HashWithAtLeast.new(hash) end describe HashWithAtLeast do it "should match the same hash" do hash_with_at_least(:a => 2).should == {:a => 2} end it "should match a hash with an extra key/value" do hash_with_at_least(:a => 2).should == {:a => 2, :b => 3} end it "should not match a hash with a missing key" do hash_with_at_least(:a => 2).should_not == {:b => 2} hash_with_at_least(:a => 2, :b => 3).should_not == {:a => 2} end it "should not match a hash with the wrong value for a key" do hash_with_at_least(:a => 2).should_not == {:a => 3} hash_with_at_least(:a => 2, :b => 3).should_not == {:a => 0, :b => 3} end end describe HashWithAtLeast, "in a message expectation" do before(:all) do @foo = Object.new end it "should match exact" do @foo.should_receive(:bar).with(hash_with_at_least(:a => 2)) @foo.bar(:a => 2) end it "should allow extra keys" do @foo.should_receive(:bar).with(hash_with_at_least(:a => 2)) @foo.bar(:a => 2, :b => 3) end end -- Rick DeNatale My blog on Ruby http://talklikeaduck.denhaven2.com/ _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users