[rspec-users] Testing render :text without has_text

David Chelimsky dchelimsky at gmail.com
Thu May 8 18:38:22 EDT 2008


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
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users



More information about the rspec-users mailing list