Re: [rspec-users] Problem with view spec - works inside the browser but spec fails with nil object

2007-11-11 Thread Caio Moritz Ronchi
 in this case, so I'd create the
 Array and populate it before handing it to assigns:

 @questions = Array.new
 @questions[4] = ...
 assigns[:questions] = @questions

 Kind regards,

 Hans

 ___
 rspec-users mailing list
 rspec-users@rubyforge.org
 http://rubyforge.org/mailman/listinfo/rspec-users




-- 
Caio Moritz Ronchi
___
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

[rspec-users] Problem with view spec - works inside the browser but spec fails with nil object

2007-11-10 Thread Caio Moritz Ronchi
Hi,

I've been trying to find an answer for this problem in the last couple
hours, but I think no discussion was about this exact same thing. So here it
goes, hope someone can help.

I'm trying to spec a view which works correctly on the browser, but that
generates the following error when I run rake spec:views.

ActionView::TemplateError in '/survey/show should display the question 4
heading correctly'
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.position
On line #1 of app/views/survey/_question_for_candidate.rhtml

1: div class=question question-%= question.position %
2:   p class=heading
3: span class=number%= question.position %./span
4: span class=description%= question.description %/span

RSpec is telling me that the question object is nil. I can't figure it out
why.

Here's the spec that generates the error (the it block should test some
tags inside the response object):

require File.dirname(__FILE__) + '/../../spec_helper'

describe '/survey/show' do
  fixtures 'questions', 'alternatives'

  before(:each) do
assigns[:configurations] = {:survey_name = 'Whatever'}
assigns[:questions] = Array.new
assigns[:questions][4] = questions(:faixa_etaria)
@faixa_etaria = questions(:faixa_etaria)
  end

  it 'should display the question 4 heading correctly' do
render 'survey/show'
  end
end

Here's the :faixa_etaria Question fixture I'm using:

faixa_etaria:
  id: 1
  question_type_id: 1
  description: 'Em qual das faixas etárias abaixo você se inclui?'
  position: 4

(The description value is in Portuguese).

Here's the show method inside the SurveyController:

  def show
@configurations = {}
Configuration.find(:all).each { |c| @configurations[c.name.to_sym] =
c.value }
@questions = {}
Question.find(:all).each { |q| @questions[q.position] = q }
  end


Here's the piece of code inside the show.rhtml template that's calling the
helper method that will cause that error:

%= render_question(@questions[4]) %

Here's the render_question method implementation, inside the SurveyHelper
class (invoking render seems to be the problem, but I don't know why):

  def render_question(question)
render(:partial = 'question_for_candidate', :locals = {:question =
question})
  end

The :locals Hash has :question as a key, and that is the variable that RSpec
is complaining about inside the partial.

Finally, here's the question_for_candidate partial:

div class=question question-%= question.position %
  p class=heading
span class=number%= question.position %./span
span class=description%= question.description %/span
  /p
  % for alternative in question.alternatives -%
%= radio_button 'candidate', question_#{question.id}, alternative.id%
label for=candidate_question%= alternative.description %/label
br /
  % end -%
/div

I'm not that experienced with Rails nor RSpec, so I'm totally lost about
this problem.

-- 
Caio Moritz Ronchi
___
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users