[rspec-users] send_file testing

vo.x v.ondruch at gmail.com
Tue Feb 24 17:25:21 EST 2009


On 24 Ún, 17:26, Nick Hoffman <n... at deadorange.com> wrote:
> On 24/02/2009, at 8:03 AM, vo.x wrote:
>
>
>
> > On 23 Ún, 18:41, Nick Hoffman <n... at deadorange.com> wrote:
> >> On 22/02/2009, at 3:34 PM, vo.x wrote:
>
> >>> Hello all,
>
> >>> Is there some best practice how to test Rails controller action  
> >>> which
> >>> is using send_file method? Could you help me please?
>
> >>> Vit
>
> >> On 23/02/2009, at 2:43 AM, vo.x wrote:
>
> >>> Just to be clear, this is how the action looks:
>
> >>>  def download
> >>>    log = ActivityLog.find(params[:id])
> >>>    if log
> >>>      send_file log.path
> >>>    else
> >>>      flash[:notice] = _("Log file \"#{params[:id]}\" was not  
> >>> found.")
> >>>      redirect_to :action => 'index'
> >>>    end
> >>>  end
>
> >>> Vit
>
> >> Hi Vit. Just stub #send_file as normal. For example:
>
> >> before :each do
> >>    controller.stub!(:send_file).and_return ...
> >> end
>
> >> it "should send the requested file" do
> >>    controller.should_receive(:send_file).with(...).and_return ...
> >>    do_get
> >> end
>
> >> Cheers,
> >> Nick
> >> _______________________________________________
> >> rspec-users mailing list
> >> rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
>
> > Hello Nick,
>
> > Thank you for your feedback, but your solution has one problem which
> > actually led me to this question. If I will stub the send_file method
> > as you recommend, then later on is automatically called render method
> > and I will get following error:
>
> > ActionView::MissingTemplate in 'LogsController handling GET /logs/
> > test.log/download should find the log requested'
> > Missing template logs/download.erb in view path app/views
>
> > So there has to be set somewhere some flag, or provided some
> > meaningful response ... Im out of ideas :/
>
> > Vit
>
> G'day Vit. ActionController is trying to render a view template for  
> your "download" controller action because ActionController does that  
> automatically. If you don't want anything to be rendered, you need to  
> tell ActionController that.
> -Nick
> _______________________________________________
> rspec-users mailing list
> rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users


Well ... and how to do that? Now its starting to be interesting ;)

Vit


More information about the rspec-users mailing list