On Tue, Mar 25, 2008 at 2:06 AM, Seth Ladd <[EMAIL PROTECTED]> wrote:
> Hm, of course, now that I have sent the previous email, I found the
> bug in my code and have fixed it. So I know I am using RSpec
> correctly with controllers and a respond_to block. Using the :format
> => 'json' attribute in my get call was all I needed.
>
> However, not matter what the format I choose, the template rendered is
> always "databases/show" (this is essentially correct behavior).
> However, it's hard to determine which show was rendered:
> show.json.erb or show.html.erb
There is a guideline in TDD that you should test your code and not
other people's code. The behaviour you're interested in testing is
that of ActionController::Base, not of your code.
> I can check the content-type header, but that's not exactly what I'd
> like to test.
>
> Is there a better way to write a spec to ensure that the correct
> template is rendered when I use certain formats?
The transformation from loosely-bound name ('databases/show') to
explicit template name with extensions happens deep in
ActionController::Base. Between that fact and the aforementioned
guideline, there is no direct support for what you are looking for in
rspec_on_rails.
You *can* do this to get closer to what you are looking for:
controller.expect_render(hash_including(:xml => anything))
or
controller.expect_render(hash_including(:json => anything))
But I, personally, would not. Since this is not supported directly by
rspec_on_rails, should the Rails implementation of render change you'd
be on your own to keep up with those changes.
HTH,
David
>
> Seth
>
>
>
> On Mon, Mar 24, 2008 at 8:35 PM, Seth Ladd <[EMAIL PROTECTED]> wrote:
> > Hello,
> >
> > I'm having a hard time testing my controllers that use respond_to.
> > I'm trying to test that I can correctly handle each MIME type on
> > request.
> >
> > For instance, I have this:
> >
> > respond_to do |format|
> > format.html
> > format.json
> > end
> >
> > And I've tried things like this:
> >
> > get 'show', :id => databases(:one).id, :format => 'json'
> > response.should render_template('show')
> >
> > but I keep getting a nil template.
> >
> > I know this works in the code, when I try a URI like
> > http://localhost:3000/foo.json
> >
> > Any tips for setting the format or MIME Type correctly so I can
> > activate other respond_to blocks?
> >
> > Thanks very much,
> > Seth
> >
> _______________________________________________
> 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