【问题标题】:Undefined method error but only in test未定义的方法错误,但仅在测试中
【发布时间】:2015-04-30 20:02:17
【问题描述】:

下面的测试会产生错误信息

ActionView::Template::Error: undefined method `avatar?' for nil:NilClass
app/views/members/index.html.erb:25:in `block in _app_views_members_index_html_erb___1876261578458959373_9315040'
app/views/members/index.html.erb:22:in `_app_views_members_index_html_erb___1876261578458959373_9315040'
test/integration/site_layout_test.rb:50:in `block in <class:SiteLayoutTest>'

但在开发中它似乎可以工作。头像显示(如果存在)。有人知道原因吗?

测试:

get users_path
assert_template 'users/index'
User.paginate(page: 1).each do |user|
  assert_select 'a[href=?]', user_path(user)

get organizations_path
assert_template 'organizations/index'
Organization.paginate(page: 1).each do |organization|
  assert_select 'a[href=?]', organization_path(organization)
end

get members_path        # THIS IS LINE 50!!
assert_template 'members/index'
Member.paginate(page: 1).each do |member|
  assert_select 'a[href=?]', member_path(member)
end

会员索引视图包括:

<% @members.each do |member| %>    # THIS IS LINE 22!!
  <tr>
    <td>
      <% if member.organization.avatar? %>      # THIS IS LINE 25!!
        <%= link_to image_tag(member.organization.avatar.url, alt: "Profile"), member_path(member) %> <%= member.username %>
      <% else %>
        <%= link_to image_tag("profile.gif", alt: "Profile"), member_path(member) %> <%= member.username %>
      <% end %>
    </td>
    <td><%= member.fullname %></td>
    etc...

【问题讨论】:

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


    【解决方案1】:

    此错误表示您尝试在 nil 上调用 avatar?

    最可能的原因是您的装置中有一个没有组织的成员,因此member.organization 的计算结果为nil

    【讨论】:

    • 谢谢,确实有一个这样的夹具通过它解决了这个错误消息。但是出现了一条新的错误消息,我将为此发布一个新问题。
    【解决方案2】:

    去掉问号

    a[href=?]
    

    应该是

    a[href]
    

    【讨论】:

    • 我认为它不应该是 [href]。我在各种测试中都有 a[href=?] 并且这些工作。 railstutorial.org 也将它包含在各种测试中......
    • 是的,hef=? 是对的。问号是替换值的占位符,它是assert_select 的第二个参数。即它正在检查链接的hreforganization_path(organization)
    猜你喜欢
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2023-03-24
    • 1970-01-01
    • 2013-04-10
    相关资源
    最近更新 更多