2015-04-30 34 views
1

下面的测试生成错误消息未定义的方法错误,但只有在测试

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... 

回答

2

这个错误意味着你已经试过打电话给avatar?nil

最有可能的原因是你有一个没有组织的会员,因此member.organization的计算结果为nil

+0

谢谢,的确是这样的夹具滑倒了,通过它解决了这一错误消息。然而,出现了一个新的错误信息,为此我会发布一个新问题。 – Nick

0

删除问号

a[href=?] 

应该

a[href] 
+0

我不认为它应该是[href]。我在各种测试中都有[href =?],这些工作。另外railstutorial.org将它包含在各种测试中...... – Nick

+0

是的,'hef =?'是对的。问号是替代值的位置持有者,它是“assert_select”的第二个参数。即它检查链接的“href”是“organization_path(organization)” – mikej

相关问题