A controller I'm trying to test simply delivers a text string to the
client, which then demarshalls it to retrieve some objects. I want to
test that the returned string is correct.
I don't want to compare the string character-by-character with
response.has_text because that ties me to the implementation of the
Marshall class. Instead, I just want to demarshall the string and
compare that with the expected objects. To do this, I need RSpec to
give me the complete text string that's rendered by the controller.
Here's the controller:
class StatsController < ApplicationController
layout nil
def query
reports = StatisticsReporter.query params[:query_params]
render :text => Marshal.dump(reports)
end
end
And here's the test:
describe StatsController do
before :each do
@query_params = { :foo => :bar }
end
it "should return a demarshallable string of the reports" do
reports = [
StatisticsReport.new(:date => nil),
StatisticsReport.new(:bytes_transferred => 0)
]
StatisticsReporter.should_receive(:query).and_return reports
get :query, :query_params => @query_params
# PROBLEM CODE (the equality test needs tweaking, but you get the
idea)
Marshal.load(response.what_goes_here?).should == reports
end
end
(This code may look familiar to one member of this list...:)
Can this be done?
adthanksvance,
///ark
on 09.05.2008 00:33
on 09.05.2008 00:38
On May 8, 2008, at 5:26 PM, Mark Wilden wrote: > Here's the controller: > And here's the test: > ] > StatisticsReporter.should_receive(:query).and_return reports > > get :query, :query_params => @query_params > > # PROBLEM CODE (the equality test needs tweaking, but you get the > idea) > Marshal.load(response.what_goes_here?).should == reports Try this: Marshal.load(response.body).should == reports
on 09.05.2008 01:43
On May 8, 2008, at 3:38 PM, David Chelimsky wrote: >> I need RSpec to give me the complete text string that's rendered by >> the controller. >> >> Try this: > > Marshal.load(response.body).should == reports Dang! I dumped response.methods and tried everything that looked likely, but I guess I missed that one. Thanks! Just to preserve my sanity in the future, is there a place where this is documented? ///ark