[rspec-users] Testing layouts with RSpec on Rails

Jonathan Linowes jonathan at parkerhill.com
Mon Oct 22 10:40:45 EDT 2007


On Oct 22, 2007, at 12:18 AM, Steve wrote:

> On Tue, 09 Oct 2007 21:12:09 +0100, Matt Patterson wrote:
>
>> It occured to me that it would be nice to have a spec that would barf
>> if I ever nuked the layout's yield (or, indeed, one of its
>> content_for yields), mainly because they're the integration point
>> between layouts and views, and we're primarily testing them in
>> isolation (a good thing...)
>>
>> I was mainly wondering if anyone had some great practices in testing
>> those integration points, and layout stuff in general, that I could
>> learn from...
>>
>> Matt
>
> Was there ever any resolution on this? This would be a *very*  
> beneficial
> capability to have for making sure views work as expected.
>
> Thanks,
> Steve
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users

I'm not sure if this is what you're after but I've created this  
custom matcher to my spec_helper.rb, then in my controller spec I can  
say

   it "should use application layout" do
     do_it
     response.should use_layout("application")
   end



# custom matchers
#---------------------
class UseLayout
   def initialize(expected)
     @expected = 'layouts/' + expected
   end
   def matches?(controller)
     @actual = controller.layout
     #@actual.equal?(@expected)
     @actual == @expected
   end
   def failure_message
     return "use_layout expected #{@expected.inspect}, got # 
{@actual.inspect}", @expected, @actual
   end
   def negeative_failure_message
     return "use_layout expected #{@expected.inspect} not to equal # 
{@actual.inspect}", @expected, @actual
   end
end

def use_layout(expected)
   UseLayout.new(expected)
end



More information about the rspec-users mailing list