[rspec-users] spec'ing view render partial collection, local variable not found

David Chelimsky dchelimsky at gmail.com
Fri Oct 5 21:01:50 EDT 2007


I meant the view code as well.

On 10/5/07, Andrew WC Brown <omen.king at gmail.com> wrote:
> As soon as I add a second key to the hash it gives me that error
>
> before do
>   game = mock_model(Game, :name => 'The Battle for Blaze', :enabled =>
> 'true')
>   game.should_receive(:name).and_return('The Battle for Blaze')
>   game.should_receive(:enabled).and_return('true')
>
>   @game = game
> end
>
> 1)
> Spec::Mocks::MockExpectationError in '/games/_game.rhtml
> should show game name'
> Mock 'Game_1082' expected :enabled with (any args) once, but received it 0
> times
> ./spec/views/games/_game.rhtml_spec.rb:19:
>
> But if it only has name it works fine.
>
> ?!??! I have other mock models setup that don't give me that trouble.
>
>
>
> On 10/5/07, Andrew WC Brown <omen.king at gmail.com> wrote:
> > _game.rhtml_spec
> >
> > require File.dirname(__FILE__) + '/../../spec_helper'
> >
> > describe "/games/_game.rhtml" do
> >   include GamesHelper
> >
> >   before do
> >     game = mock_model(Game,
> >       :name => 'The Battle for Blaze',
> >       :salt_grains => 5000000,
> >       :people => 5000000,
> >       :days => nil,
> >       :created_at => "Mon Oct 01 00:02:44 -0400 2007",
> >       :enabled => true)
> >     game.should_receive (:name).and_return('The Battle for Blaze')
> >     game.should_receive(:salt_grains).and_return(5000000)
> >     game.should_receive(:people).and_return(5000000)
> >     game.should_receive(:days).and_return(nil)
> >     game.should_receive(:created_at).and_return("Mon Oct 01 00:02:44 -0400
> 2007")
> >     game.should_receive(:enabled).and_return(true)
> >
> >     @game = game
> >   end
> >
> >   it "should show game name" do
> >     render :partial =>"games/game", :locals => {:game => @game}
> >     response.should have_text(/The Battle for Blaze/)
> >   end
> >
> > end
> >
> > When you say full listing did you mean html format?
> > I cut out most of my specs just to spec the partial.
> > I only have the one spec in my partial
> >
> >
> >
> >
> >
> > On 10/5/07, David Chelimsky < dchelimsky at gmail.com> wrote:
> > > On 10/5/07, Andrew WC Brown < omen.king at gmail.com> wrote:
> > > > Well I think my biggest problem I was having was the fact that my
> before
> > > > block was:
> > > >
> > > >  def before
> > > >  end
> > > >
> > > >  instead of
> > > >
> > > >  before do
> > > >  end
> > >
> > > D'oh - can't believe I missed that.
> > >
> > > >
> > > > So I think its working, although my mock is complaining now:
> > > > before do
> > > >     game = mock_model(Game,
> > > >       :name => 'The Battle for Blaze',
> > > >       :salt_grains => 5000000,
> > > >       :people => 5000000,
> > > >       :days => nil,
> > > >       :created_at => "Mon Oct 01 00:02:44 -0400 2007",
> > > >       :enabled => true)
> > > >     game.should_receive(:name).and_return('The Battle for Blaze')
> > > >     game.should_receive
> (:salt_grains).and_return(5000000)
> > > >     game.should_receive(:people).and_return(5000000)
> > > >     game.should_receive(:days).and_return(nil)
> > > >     game.should_receive(:created_at).and_return("Mon Oct 01 00:02:44
> -0400
> > > > 2007")
> > > >     game.should_receive(:enabled).and_return(true)
> > > >     @game = game
> > > > end
> > > >
> > > > 1)
> > > > Spec::Mocks::MockExpectationError in
> '/games/_game.rhtml
> > > > should show game name'
> > > > Mock 'Game_1082' expected :salt_grains with (any args) once, but
> received it
> > > > 0 times
> > > > ./spec/views/games/_game.rhtml_spec.rb:15:
> > >
> > > I'd need to see the full listing of both spec and code as they are now
> > > to help you w/ that.
> > >
> > > >
> > > >
> > > > On 10/5/07, David Chelimsky < dchelimsky at gmail.com> wrote:
> > > > > On 10/5/07, Andrew WC Brown < omen.king at gmail.com > wrote:
> > > > > > Well when I saw that originally thats what I thought the response
> was
> > > > > > suppose to come after the render but:
> > > > > >
> > > > > > ActionView::ActionViewError in '/games/_game.rhtml should show
> game
> > > > name'
> > > > > > No rhtml, rxml, rjs or delegate template found for //_game in
> > > > > >
> /Volumes/EXTERNAL/web/omenking.ca/config/../app/views
> > > > > >
> > > > > > games/_game.rhtml does exist.
> > > > > >
> > > > > > which maybe I have to state:
> > > > > >
> > > > > >   it "should show game name" do
> > > > > >     render :partial =>"games/game", :collection => @games
> > > > > >     response.should have_text(/The Battle for Blaze/)
> > > > > >   end
> > > > > >
> > > > > > but then:
> > > > > >
> > > > > > 1)
> > > > > > ActionView::TemplateError in '/games/_game.rhtml should show game
> name'
> > > > > > You have a nil object when you didn't expect it!
> > > > > > The error occurred while evaluating nil.name
> > > > > > On line #1 of app/views/games/_game.rhtml
> > > > > >
> > > > > >     1: <%= h game.name %>
> > > > > >
> > > > > > so the local variable is show up nil.
> > > > >
> > > > > :collection is something rails uses to render a template multiple
> > > > > times. RSpec only renders the file once (as intended). Try using
> > > > > :object:
> > > > >
> > > > > render :partial =>"games/game", :object => @game
> > > > >
> > > > > (of course, you'll have to have setup @game).
> > > > >
> > > > > >
> > > > > >
> > > > > >  On 10/5/07, David Chelimsky <dchelimsky at gmail.com> wrote:
> > > > > > >
> > > > > > > On 10/5/07, Andrew WC Brown < omen.king at gmail.com> wrote:
> > > > > > > > 1)
> > > > > > > > '/games/_game.rhtml should show game name' FAILED
> > > > > > > > expected /The Battle for Blaze/, got ""
> > > > > > > > ./spec/views/games/_game.rhtml_spec.rb:39:
> > > > > > > >
> > > > > > > >   def before
> > > > > > > >     game_1 = mock_model(Game,
> > > > > > > >       :name => 'The Battle for Blaze',
> > > > > > > >       :salt_grains => 5000000,
> > > > > > > >       :people => 5000000,
> > > > > > > >       :days => nil,
> > > > > > > >       :created_at => "Mon Oct 01 00:02:44 -0400 2007",
> > > > > > > >       :enabled => true)
> > > > > > > >
> game_1.should_receive(:name).and_return("The
> > > > Battle
> > > > > > for
> > > > > > > > Blaze")
> > > > > > > >
> > > > > >
> game_1.should_receive(:salt_grains).and_return(5000000)
> > > > > > > >
> > > > game_1.should_receive(:people).and_return(5000000)
> > > > > > > >
> game_1.should_receive(:days).and_return(nil)
> > > > > > > >
> > > > game_1.should_receive(:created_at).and_return("Mon
> > > > > > Oct
> > > > > > > > 01 00:02:44 -0400 2007")
> > > > > > > >
> > > > game_1.should_receive(:enabled).and_return(true)
> > > > > > > >
> > > > > > > >     game_2 = mock_model(Game,
> > > > > > > >       :name => 'Epicbattlegrounds',
> > > > > > > >       :salt_grains => 30000000,
> > > > > > > >       :people => 20000000,
> > > > > > > >       :days => 100,
> > > > > > > >       :created_at => "Mon Sept 01 12:02:44 -0400 2007",
> > > > > > > >       :enabled => false)
> > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> game_2.should_receive(:name).and_return("Epicbattlegrounds")
> > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> game_2.should_receive(:salt_grains).and_return(30000000)
> > > > > > > >
> > > > game_2.should_receive(:people).and_return(20000000)
> > > > > > > >
> game_2.should_receive(:days).and_return(100)
> > > > > > > >
> > > > game_2.should_receive(:created_at).and_return("Mon
> > > > > > Sept
> > > > > > > > 01 12:02:44 -0400 2007")
> > > > > > > >
> > > > game_2.should_receive(:enabled).and_return(false)
> > > > > > > >     @games = [game_1, game_2]
> > > > > > > >     assigns[:games] = [game_1, game_2]
> > > > > > > >   end
> > > > > > > >
> > > > > > > >   it "should show game name" do
> > > > > > > >     response.should have_text(/The Battle for Blaze/)
> > > > > > > >     render :partial =>"game", :collection => @games
> > > > > > >
> > > > > > > Switch these around:
> > > > > > >
> > > > > > > render :partial =>"game", :collection => @games
> > > > > > > response.should have_text(/The Battle for Blaze/)
> > > > > > >
> > > > > > >
> > > > > > > >   end
> > > > > > > >
> > > > > > > > I think the local variable is showing up nil because my specs
> in the
> > > > > > > > index.rhtml were failing when they were fine before and they
> were
> > > > saying
> > > > > > > > they didn't know what this game variable was.
> > > > > > > >
> > > > > > > > Any ideas?
> > > > > > > >
> > > > > > > >
> > > > > > > > On 10/5/07, David Chelimsky < dchelimsky at gmail.com> wrote:
> > > > > > > > > On 10/5/07, Andrew WC Brown < omen.king at gmail.com> wrote:
> > > > > > > > > > I'm trying to spec out a render partial collection but I
> get the
> > > > > > > > following
> > > > > > > > > > error
> > > > > > > > > >
> > > > > > > > > > 2)
> > > > > > > > > > NoMethodError in '/games/_game.rhtml should show game
> name'
> > > > > > > > > > undefined method `body' for
> #<#<Class:0x316580c>:0x2f1154c>
> > > > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> /Volumes/EXTERNAL/web/omenking.ca/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/have_text.rb:12:in
> > > > > > > > > > `matches?'
> > > > > > > > > >
> ./spec/views/games/_game.rhtml_spec.rb:39:
> > > > > > > > > >
> > > > > > > > > >   def before
> > > > > > > > > >     game = mock_model(Game,
> > > > > > > > > >       :name => 'The Battle for Blaze',
> > > > > > > > > >       :salt_grains => 5000000,
> > > > > > > > > >       :people => 5000000,
> > > > > > > > > >       :days => nil,
> > > > > > > > > >       :created_at => "Mon Oct 01 00:02:44 -0400 2007",
> > > > > > > > > >        :enabled => true)
> > > > > > > > > >     game.should_receive(:name).and_return("The Battle for
> > > > Blaze")
> > > > > > > > > >
> > > > > > > >
> > > > game.should_receive(:salt_grains).and_return(5000000)
> > > > > > > > > >     game.should_receive(:people).and_return(5000000)
> > > > > > > > > >     game.should_receive (:days).and_return(nil)
> > > > > > > > > >     game.should_receive(:created_at).and_return("Mon Oct
> 01
> > > > 00:02:44
> > > > > > > > -0400
> > > > > > > > > > 2007")
> > > > > > > > > >     game.should_receive(:enabled).and_return(true)
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >     assigns[:games] = [game]
> > > > > > > > > >   end
> > > > > > > > > >
> > > > > > > > > >   it "should show game name" do
> > > > > > > > > >     template.should have_text(/The Battle for Blaze/)
> > > > > > > > >
> > > > > > > > > response.should have_text ....
> > > > > > > > >
> > > > > > > > > (not template.should ...)
> > > > > > > > >
> > > > > > > > > >     render :partial =>"game", :collection => @games
> > > > > > > > > >   end
> > > > > > > > > >
> > > > > > > > > >
> _______________________________________________
> > > > > > > > > > rspec-users mailing list
> > > > > > > > > > rspec-users at rubyforge.org
> > > > > > > > > >
> > > > http://rubyforge.org/mailman/listinfo/rspec-users
> > > > > > > > > >
> > > > > > > > >
> _______________________________________________
> > > > > > > > > rspec-users mailing list
> > > > > > > > > rspec-users at rubyforge.org
> > > > > > > > >
> http://rubyforge.org/mailman/listinfo/rspec-users
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> _______________________________________________
> > > > > > > > rspec-users mailing list
> > > > > > > > rspec-users at rubyforge.org
> > > > > > > >
> http://rubyforge.org/mailman/listinfo/rspec-users
> > > > > > > >
> > > > > > > _______________________________________________
> > > > > > > rspec-users mailing list
> > > > > > > rspec-users at rubyforge.org
> > > > > > >
> http://rubyforge.org/mailman/listinfo/rspec-users
> > > > > > >
> > > > > >
> > > > > >
> > > > > > _______________________________________________
> > > > > > rspec-users mailing list
> > > > > > rspec-users at rubyforge.org
> > > > > > http://rubyforge.org/mailman/listinfo/rspec-users
> > > > > >
> > > > > _______________________________________________
> > > > > rspec-users mailing list
> > > > > rspec-users at rubyforge.org
> > > > > http://rubyforge.org/mailman/listinfo/rspec-users
> > > > >
> > > >
> > > >
> > > >
> > > > _______________________________________________
> > > > rspec-users mailing list
> > > > rspec-users at rubyforge.org
> > > > http://rubyforge.org/mailman/listinfo/rspec-users
> > > >
> > > _______________________________________________
> > > rspec-users mailing list
> > > rspec-users at rubyforge.org
> > > http://rubyforge.org/mailman/listinfo/rspec-users
> > >
> >
> >
> >
> > --
> > Monsterbox Productions
> > putting small businesses on-line
> >
> > 1319 Victoria Avenue East
> > Thunder Bay, Ontario P7C 1C3
> > Canada
> >
> > Andrew WC Brown
> > web-developer and owner
> > andrew at monsterboxpro.com
> > P: 807-626-9009
> > F: 807-624-2705
>
>
>
> --
> Monsterbox Productions
> putting small businesses on-line
>
> 1319 Victoria Avenue East
> Thunder Bay, Ontario P7C 1C3
> Canada
>
> Andrew WC Brown
> web-developer and owner
> andrew at monsterboxpro.com
> P: 807-626-9009
> F: 807-624-2705
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>


More information about the rspec-users mailing list