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

Reply via email to