On Nov 16, 2010, at 8:16 AM, Matt Darby wrote:

> I've been looking for the definitive answer for months now, and the
> RSpec book doesn't touch on it at all:
> 
> How do we now handle stubbing out rendering of partials in view specs
> in RSpec2?
> 
> I have a large (35K+ lines of views and related specs) that I'm trying
> to upgrade to Rails3/RSpec2. My views use partials pretty extensively
> and this issue is a huge blocker for me.
> 
> before do
>  view.should render_template("event_list", :locals => {:calendar =>
> @calendar})
> end
> 
> causes all my related specs fail with:
> 
> expecting <"event_list"> but rendering with <"">.
> Expected block to return true value.
> 
> 
> Any advice?

In rspec-2/rails-3, view.should render_template("event_list") is no longer a 
message expectation (pre-action), but rather delegates to Rails' 
assert_template method, so it needs to come _after_ the action. It should work 
exactly as you have it above, just after the action.

This is documented in the rspec-rails README 
(https://github.com/rspec/rspec-rails - see sections on View Specs and 
Matchers), though not with an upgrade note pointing out that it changed. I'll 
make that addition shortly.

As for stubbing the template, so that it is not actually rendered, RSpec 
doesn't offer a way to do this in view specs and I don't think Rails does 
either. I added an issue for this 
(https://github.com/rspec/rspec-rails/issues/issue/263), and hopefully we'll be 
able to resolve it soon. In the mean time, the examples will need to supply any 
data needed by the template being spec'd _and_ any of the partials.

Side note: I urge you not to put message expectations (pre "When") or 
state-based expectations (post "When") in before/after blocks. It makes 
examples difficult to understand, and results in specifying the same things in 
every example in a group. Rather, have one example that specifies each 
individual thing. In this case:

  it "renders the event_list with @calendar" do
    render
    view.should render_template(
      "event_list",
      :locals => {:calendar => @calendar}
    )
  end

HTH,
David
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to