Ошибка метода при использовании огурца (с рельсами, webrat и mongomapper) - PullRequest
0 голосов
/ 07 декабря 2011

Я пишу несколько основных пошаговых инструкций в Cucumber и не могу понять, почему возникает ошибка «отсутствует метод».Вот точная ошибка:

undefined method `question' for nil:NilClass (ActionView::Template::Error)

Корень этой ошибки - строка из моей страницы index.html.erb:

<p id="question"><%= @question.question %></p>

Похоже, что тест думает, что @questionнольЯ не уверен, почему он так думает.Что я должен изменить в моих пошаговых инструкциях?Вот они:

Given /^a question$/ do
  @question = Question.create!(:question => "here's my question..", :answer => "right_answer", :num => "1")
end

When /^I answer the question$/ do
  visit root_path
  fill_in "Answer", :with => "Wrong answer"
  click_button "Submit answer"
end

Первый шаг инструкции пройден, а второй - нет.


РЕДАКТИРОВАТЬ: Вот моя вся страница index.html.erb, если она полезна:

<% title "Questions" %>

<p id="question"><%= @question.question %></p>

<%= form_for @user_answer do |f| %>
  <div><%= f.label :answer %></div>
  <div><%= f.text_field :answer %></div>
  <div id="sign_up_button"><%= f.submit "Submit answer" %></div>
<% end %>

<p><%= link_to "New Question", new_question_path %></p>

РЕДАКТИРОВАТЬ: модель моего вопроса, если она полезна:

class Question
  include MongoMapper::Document

  key :question, String, :required => true
  key :answer, String, :required => true
  key :num, String, :required => true

Ответы [ 2 ]

1 голос
/ 06 июня 2012

Предполагая, что вы даете нам отрывок из трассировки стека, ваша проблема заключается в том, что вы неправильно устанавливаете @question в своем контроллере - что вы не опубликовали выше. Несколько других людей ссылались на это в своих ответах, но я вполне в этом убежден.

Ваши тесты - огурцы или нет - не имеют отношения к вашей проблеме.

Я подозреваю, что если вы посетите ваш root_url, у вас возникнет та же проблема - вы получите трассировку стека и ошибку. Не зная точно, каковы ваши маршруты, я не могу быть уверен, куда вы отправляетесь, когда посещаете root_url.

Ваш контроллер должен загружать @question с вашим объектом вопроса (возможно, через Question.find () или что-то подобное), а затем отображать вашу страницу index.html.erb. Таким образом, ваше действие 'index' в вашем контроллере должно быть тем, что заполняет ваш @ вопрос.

Обратите внимание, что вы здесь не следуете принципам отдыха - обычно люди имеют «индексы», которые дают вам списки вещей (вопросы в вашем случае), а затем идентификаторы задают вам конкретный вопрос.

Бьюсь об заклад, если вы перейдете к конкретному вопросу, он отлично работает.

Может быть, ваша проблема в том, что вы не должны тестировать, посещая root_path? Может быть, вы должны идти по определенному пути «вопроса»?

0 голосов
/ 07 декабря 2011

Есть ли у вас какие-либо проверки в модели вопросов? Может быть, вы не можете создать новый объект вопроса, как вы пытаетесь.

...