On May 8, 2008, at 5:26 PM, Mark Wilden wrote:

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

Try this:

Marshal.load(response.body).should == reports


end
end

(This code may look familiar to one member of this list...:)

Can this be done?

adthanksvance,

///ark

_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to