[rspec-users] Specing Layouts

David Chelimsky dchelimsky at gmail.com
Sun Jul 15 10:35:33 EDT 2007


On 7/15/07, Daniel N <has.sox at gmail.com> wrote:
>
>
>
> On 7/15/07, David Chelimsky <dchelimsky at gmail.com> wrote:
> > On 7/14/07, Daniel N <has.sox at gmail.com> wrote:
> > >
> > >
> > > On 7/15/07, David Chelimsky <dchelimsky at gmail.com> wrote:
> > > > On 7/14/07, Daniel N <has.sox at gmail.com> wrote:
> > > > > Hi,
> > > > >
> > > > > I've just started to try and spec my application.html.erb layout as
> one
> > > of
> > > > > the view specs but it totally barfs.
> > > > >
> > > > > I'm guessing that it's due to the yield statements in the layout.
> > > > >
> > > > > Any clues as to how to proceed?
> > > >
> > > > Backtrace please? Could be any number of things.
> > > >
> > > > >
> > >
> > > Sorry,  here it is
> > >
> > > ......rake aborted!
> > > Command ruby
> > >
> -I"/Users/dneighman/Documents/Projects/rails_projects/update_to_clippings/vendor/plugins/rspec/lib"
> > >
> "/Users/dneighman/Documents/Projects/rails_projects/update_to_clippings/vendor/plugins/rspec/bin/spec"
> > > "spec/controllers/books_controller_spec.rb"
> > > "spec/controllers/sessions_controller_spec.rb"
> > > "spec/controllers/users_controller_spec.rb"
> > > "spec/helpers/books_helper_spec.rb"
> > > "spec/helpers/sessions_helper_spec.rb"
> > > "spec/helpers/users_helper_spec.rb"
> > > "spec/models/book_spec.rb"
> > > "spec/models/user_notifier_spec.rb"
> > > "spec/models/user_spec.rb"
> > > "spec/views/books/_detail.html.erb_spec.rb"
> > > "spec/views/books/edit.html.erb_spec.rb"
> > > "spec/views/books/index.html.erb_spec.rb"
> > > "spec/views/books/new.html.erb_spec.rb"
> > > "spec/views/books/new_rjs.html.erb_spec.rb"
> > > "spec/views/books/rjs_index.html.erb_spec.rb"
> > > "spec/views/books/show.html.erb_spec.rb"
> > > "spec/views/layouts/application.html.erb_spec.rb"
> --options
> > >
> "/Users/dneighman/Documents/Projects/rails_projects/update_to_clippings/spec/spec.opts"
> > > failed
> > >
> /Users/dneighman/Documents/Projects/rails_projects/update_to_clippings/vendor/plugins/rspec/lib/spec/rake/spectask.rb:166:in
> > > `define'
> > > /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.3
> /lib/rake.rb:823:in
> > > `verbose'
> > >
> /Users/dneighman/Documents/Projects/rails_projects/update_to_clippings/vendor/plugins/rspec/lib/spec/rake/spectask.rb:138:in
> > > `define'
> > > /usr/local/lib/ruby/gems/1.8/gems/rake-
> 0.7.3/lib/rake.rb:392:in
> > > `call'
> > >
> /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:392:in
> > > `execute'
> > >
> /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:392:in
> > > `each'
> > >
> /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:392:in
> > > `execute'
> > >
> /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:362:in
> > > `invoke'
> > > /usr/local/lib/ruby/gems/1.8/gems/rake-
> 0.7.3/lib/rake.rb:355:in
> > > `synchronize'
> > >
> /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:355:in
> > > `invoke'
> > >
> /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1739:in
> > > `top_level'
> > >
> /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1739:in
> > > `each'
> > >
> /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1739:in
> > > `top_level'
> > > /usr/local/lib/ruby/gems/1.8/gems/rake-
> 0.7.3/lib/rake.rb:1761:in
> > > `standard_exception_handling'
> > >
> /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1733:in
> > > `top_level'
> > > /usr/local/lib/ruby/gems/1.8/gems/rake-
> > > 0.7.3/lib/rake.rb:1711:in `run'
> > >
> /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1761:in
> > > `standard_exception_handling'
> > >
> /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:1708:in
> > > `run'
> > > /usr/local/lib/ruby/gems/1.8/gems/rake-
> 0.7.3/bin/rake:7
> > > /usr/local/bin/rake:16:in `load'
> > > /usr/local/bin/rake:16
> > >
> > > And the test is
> > >
> > > require File.dirname (__FILE__) + '/../../spec_helper'
> > >
> > > describe "/layouts/application.html.erb" do
> > >
> > >   it "should render" do
> > >     render "/layouts/application.html.erb"
> > >   end
> > >
> > >
> > > end
> >
> > Thanks. Unfortunately there's nothing in that backtrace that talks
> > about application.html.erb. Would you please run this command and post
> > the result?
> >
> > script/spec spec/views/layouts/application.html.erb -b
> >
> > Thanks,
> > David
>
> Hi David,
>
> Very strange indeed.  I had to change the command to
> script/spec spec/views/layouts/application.html.erb_spec.rb
> -b
>
> When I run this I get no errors at all.  But I also get no output at all.
>
> When I run the focused example in Textmate it passes but there is no listing
> of the example in the output.  This is the same as running the  Behaviour
> Description
>
> It also does not seem to fail anything.  I ran the following
>
> >   def do_render
> >     render "/layouts/application.html.erb"
> >   end
> >
> >   it "should render the template" do
> >     do_render
> >     response.should have_tag("not_there_tag")
> >     flunk
> >   end
>
> This seems to pass everything.  But when I run it with
> rake spec I get the same error as before
>
> In an attempt to see if it is running the template at all I put a dodgy
> method call in the template to try to crash it.  It crashes.
>
> Here's the stack trace
>
> ActionView::TemplateError in '/layouts/application.html.erb should render
> the template'
> undefined local variable or method `bad_method' for
> #<#<Class:0x3344718>:0x33446f0>
> On line #14 of app/views/layouts/application.html.erb
>
>     11:         <%= javascript_include_tag :defaults, 'lowpro' -%>
>     12:         <%= stylesheet_link_tag 'common' -%>
>     13:         <%= resource_on_demand %>
>     14:         <%= bad_method %>
>     15:
>     16: </head>
>     17:
>
>
> #{RAILS_ROOT}/app/views//layouts/application.html.erb:14:in
> `_run_erb_47app47views47layouts47application46html46erb'
>     /usr/local/lib/ruby/gems/1.8/gems/actionpack-
> 1.13.3.6752/lib/action_view/base.rb:346:in `send'
>
> /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.13.3.6752/lib/action_view/base.rb:346:in
> `compile_and_render_template'
>     /usr/local/lib/ruby/gems/1.8/gems/actionpack-
> 1.13.3.6752/lib/action_view/base.rb:322:in `render_template_old'
>
> #{RAILS_ROOT}/vendor/plugins/stable/lib/haml/template.rb:96:in
> `render_template'
>
> /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.13.3.6752
> /lib/action_view/base.rb:282:in `render_file'
>
> /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.13.3.6752/lib/action_controller/base.rb:854:in
> `render_file'
>     /usr/local/lib/ruby/gems/1.8/gems/actionpack-
> 1.13.3.6752/lib/action_controller/base.rb:789:in
> `render_with_no_layout'
>
> /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.13.3.6752/lib/action_controller/layout.rb:258:in
> `render_without_benchmark'
>     /usr/local/lib/ruby/gems/1.8/gems/actionpack-
> 1.13.3.6752/lib/action_controller/benchmarking.rb:51:in
> `render'
>     /usr/local/lib/ruby/1.8/benchmark.rb:293:in `measure'
>
> /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.13.3.6752/lib/action_controller/benchmarking.rb:51:in
> `render'
>
> #{RAILS_ROOT}/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/view.rb:55:in
> `send'
>
> #{RAILS_ROOT}/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/view.rb:55:in
> `render'
>     spec/views/layouts/application.html.erb_spec.rb:6:in
> `do_render'
>     spec/views/layouts/application.html.erb_spec.rb:10
>
> #{RAILS_ROOT}/vendor/plugins/rspec/lib/spec/dsl/example.rb:81:in
> `instance_eval'
>
> #{RAILS_ROOT}/vendor/plugins/rspec/lib/spec/dsl/example.rb:81:in
> `run_example'
>
> #{RAILS_ROOT}/vendor/plugins/rspec/lib/spec/dsl/example.rb:26:in
> `run'
>     /usr/local/lib/ruby/1.8/timeout.rb:48:in `timeout'
>
> #{RAILS_ROOT}/vendor/plugins/rspec/lib/spec/dsl/example.rb:24:in
> `run'
>
> #{RAILS_ROOT}/vendor/plugins/rspec/lib/spec/dsl/behaviour.rb:80:in
> `run'
>
> #{RAILS_ROOT}/vendor/plugins/rspec/lib/spec/dsl/behaviour.rb:74:in
> `each'
>
> #{RAILS_ROOT}/vendor/plugins/rspec/lib/spec/dsl/behaviour.rb:74:in
> `run'
>
> #{RAILS_ROOT}/vendor/plugins/rspec/lib/spec/runner/behaviour_runner.rb:58:in
> `run_behaviours'
>
> #{RAILS_ROOT}/vendor/plugins/rspec/lib/spec/runner/behaviour_runner.rb:57:in
> `each'
>
> #{RAILS_ROOT}/vendor/plugins/rspec/lib/spec/runner/behaviour_runner.rb:57:in
> `run_behaviours'
>
> #{RAILS_ROOT}/vendor/plugins/rspec/lib/spec/runner/behaviour_runner.rb:21:in
> `run'
>
> #{RAILS_ROOT}/vendor/plugins/rspec/lib/spec/runner/command_line.rb:17:in
> `run'
>     script/spec:4
>
> I've changed to a haml template, and used the same spec but with a different
> file (.haml) to render and it ran fine.  Passes everything with complete
> listings etc.
>
> I really don't know what to make of it.

Me neither. I don't have any trouble like what you've described, and I
do have application.html.erb described in my apps.

As for .haml, I haven't tried using .haml and rspec_on_rails does not
support .haml at this point, nor is there any plan to do so. Not that
we've chosen not to, just that it hasn't come up as a feature request.
Although, if it does, it won't likely get implemented until either
Aslak or I decide to start using haml on our own projects or someone
on this list submits a patch.

Haml aside, I'm clueless. If you want to send me a zip file (you can
send it off list) of the whole project, I'd be glad to try and start
it up and see what I can find.

Meanwhile, if anyone else is having a similar experience, please speak up.

Thanks,
David

>
> Cheers
> Daniel
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>


More information about the rspec-users mailing list