测试中未定义的方法“名称”,而在开发中工作

Undefined method `name' in test, while working in development

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

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:many) 之间的关系工作正常。是什么原因造成的;为什么 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

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