Failing test despite "expected" and "got" being identical

Slightly flummoxed on this one.

Spec::Mocks::MockExpectationError in ‘ChartEventsController handling
GET /chart_events should find all chart_events given a value’
expected: ([:all, {:conditions=>[“value LIKE ?”, “%chart_event%”]}])
got: ([:all, {:conditions=>[“value LIKE ?”, “%chart_event%”]}])

In other words it got exactly what it expected, but, er, failed?

Controller:
if params[:q]
@chart_events = ChartEvent.find(:all, :conditions =>[‘value LIKE
?’, “%#{(params[:q])}%”])
else
@chart_events = ChartEvent.all(:order=>‘value’)
end

controller_spec
before do
@chart_event = mock_model(ChartEvent, :value => “chart_event”)
ChartEvent.stub!(:find).and_return([@chart_event])
end

it “should find all chart_events given a value” do
ChartEvent.should_receive(:find).with([:all, {:conditions=>[“value
LIKE ?”, “%#{@chart_event.value}%”]}]).and_return([@chart_event])
get :index, :q => @chart_event.value
end

On Thu, May 6, 2010 at 5:02 AM, ben rooney [email protected]
wrote:

if params[:q]
ChartEvent.stub!(:find).and_return([@chart_event])
end

it “should find all chart_events given a value” do
ChartEvent.should_receive(:find).with([:all, {:conditions=>[“value
LIKE ?”, “%#{@chart_event.value}%”]}]).and_return([@chart_event])
get :index, :q => @chart_event.value
end

I think you want ChartEvent.should_receive(:find).with(:all,
{:conditions=>[“value LIKE ?”, “%#{@chart_event.value}%”]})…

The output from the message expectation failure is a bit confusing,
but the argument list to the with method should look like the argument
list to the expected method. The expectation here is that find should
get one argument, an array with a symbol and a hash, rather than two
parameters, a symbol and a hash.

It would be better if the failure were reported like this:

expected: ([:all, {:conditions=>[“value LIKE ?”, “%chart_event%”]}])
got: (:all, {:conditions=>[“value LIKE ?”, “%chart_event%”]})


Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Github: rubyredrick (Rick DeNatale) · GitHub
Twitter: @RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale

On May 6, 2010, at 8:47 AM, Rick DeNatale wrote:

Controller:
@chart_event = mock_model(ChartEvent, :value => “chart_event”)
{:conditions=>[“value LIKE ?”, “%#{@chart_event.value}%”]})…
got: (:all, {:conditions=>[“value LIKE ?”, “%chart_event%”]})

FYI - it is reported this way in rspec-2.