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

Reply via email to