在开发中工作时,测试中未定义的方法`name'

时间:2015-04-28 11:29:45

标签: ruby-on-rails ruby ruby-on-rails-4 integration-testing

我在开发服务器上有一个失败的测试它工作正常。测试会生成错误:

ActionView::Template::Error: undefined method `name' for nil:NilClass
app/views/members/show.html.erb:15:in `_app_views_members_show_html_erb__387437852342830797_46300380'
test/integration/site_layout_test.rb:18:in `block in <class:SiteLayoutTest>'

错误是指下方展示视图第三行的.name。它在集成测试中引用get member_path(@member_admin)

我不明白可能导致此错误的原因。 name是组织模型中的一列,但组织和成员(1:很多)之间的关系可以正常工作。是什么导致了这一点;为什么Rails没有认识到name变量是什么?

在成员控制器中我有:

  def show
    @member = Member.find(params[:id])
    @organization = @member.organization
    redirect_to organization_path(@organization) and return unless (@member.activated || (current_member && !current_member.admin))
  end

在节目视图中:

<div class="col-md-5">
  <p><b>Fullname </b> <%= @member.fullname %></p>
  <p><b>Organization </b> <%= link_to @organization.name, organization_path(@organization) %></p>
  <p><b>Email</b> <%= @member.email %></p>
  <p><b>Phone</b> <%= @member.phone %></p>
</div>

测试:

  def setup
    @member_admin     = orgusers(:one)
  end

  test "layout links" do
    log_in_as("member", @member_admin)
    get member_path(@member_admin)
  end

1 个答案:

答案 0 :(得分:0)

很简单,您的Member在测试中没有关联的Organization。确保您的测试夹具在这些模型之间提供正确的关系。