mwalsh
August 18, 2008, 6:11pm
1
Hi folks,
I have an object whose constructor I want to stub, specifying that it
should be passed a hash containing an expected set of key / value pairs.
Note that the actual hash might contain more key / value pairs, but I
don’t care, as long as my expected ones are there
I thought I might be able to write this:
expected_params = {
:page => "1",
:city_id => city.id.to_s,
:name => "thingy" }
Venue::Query.should_receive(:new).with( include
(expected_params) ).and_return(query)
… but it doesn’t seem to work.
What’s my best approach?
Thanks for your patience and support as I get up to speed with this
stuff folks. You’re all very kind!
cheers,
Matt
http://blog.mattwynne.net
In case you wondered: The opinions expressed in this email are my own
and do not necessarily reflect the views of any former, current or
future employers of mine.
mwalsh
August 18, 2008, 6:23pm
2
Okay, I realised the with() is calling the == method on whatever you
pass in, so I did this:
module EquateAnyHashContainingAllMyElements
def ==(other)
self.keys.all? do |key|
other.has_key?(key)
end
end
end
…
expected_params = {
:page => "1",
:city_id => city.id.to_s,
:name => name_filter }
expected_params.extend(EquateAnyHashContainingAllMyElements)
Venue::Query.should_receive(:new).with
( expected_params ).and_return(query)
Thoughts? Is there a neater way to do this? Be as brutal as you
like …
cheers,
Matt
http://blog.mattwynne.net
In case you wondered: The opinions expressed in this email are my own
and do not necessarily reflect the views of any former, current or
future employers of mine.
mwalsh
August 18, 2008, 6:24pm
3
On Aug 18, 2008, at 11:10 AM, Matt W. [email protected] wrote:
expected_params = {
:page => "1",
:city_id => city.id.to_s,
:name => "thingy" }
Venue:
:Query.
should_receive(
:new).with( include(expected_params) ).and_return(query)
Close …
…with( hash_including(expected_params).and…
Cheers,
David