使用黄瓜时使用方法缺少错误(使用rails,webrat和mongomapper)

时间:2011-12-06 21:40:51

标签: ruby-on-rails testing cucumber mongomapper webrat

我在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 个答案:

答案 0 :(得分:1)

假设您正确地向我们提供了堆栈跟踪的摘录,您的问题是您没有在控制器中正确设置@question - 您尚未在上面发布。其他几个人在他们的回答中暗示了这一点,但我完全相信它。

您的测试 - 黄瓜或其他 - 与您遇到的问题无关。

我怀疑如果您访问root_url,您将遇到同样的问题 - 您将获得堆栈跟踪和错误。在不确切知道您的路线是什么的情况下,我无法确定您在访问root_url时的发送位置。

你的控制器加载问题对象的@question(可能是通过Question.find()或类似的东西),然后渲染index.html.erb页面。所以你的控制器中的'索引'动作应该是你的@question中填充的东西。

请注意,您并未遵循其余的原则 - 通常人们会让'索引'为您提供事项列表(您的实例中的问题),然后ID会给您一个特定的问题。

我打赌,如果你去一个特定的问题,那就可以了。

也许你的问题是你不应该首先访问'root_path'进行测试?也许你应该去一个特定的“问题”路径?

答案 1 :(得分:0)

您对问题模型有任何验证吗?也许你无法像尝试一样创建新的问题对象。