迈克尔·哈特尔';s Ruby-on-rails教程-Rspec测试失败-未定义的方法'microposts';

迈克尔·哈特尔';s Ruby-on-rails教程-Rspec测试失败-未定义的方法'microposts';,ruby-on-rails,rspec,railstutorial.org,Ruby On Rails,Rspec,Railstutorial.org,所以我是迈克尔·哈特尔(伟大的)RoR教程的导师。 读完第10章后,我决定将micropost表单添加到用户的个人资料页面中,这样您也可以从那里发帖,而不仅仅是从主页发帖 我设法使它工作得很好,但不知怎么的,它使我的测试套件崩溃了 以下是我从Rspec收到的错误消息,用于我的所有用户页面\u spec.rb配置文件页面测试: UserPages profile page Failure/Error: before { visit user_path(user) } NoMe

所以我是迈克尔·哈特尔(伟大的)RoR教程的导师。 读完第10章后,我决定将micropost表单添加到用户的个人资料页面中,这样您也可以从那里发帖,而不仅仅是从主页发帖

我设法使它工作得很好,但不知怎么的,它使我的测试套件崩溃了

以下是我从Rspec收到的错误消息,用于我的所有用户页面\u spec.rb配置文件页面测试:

UserPages profile page 
     Failure/Error: before { visit user_path(user) }
     NoMethodError:
       undefined method `microposts' for nil:NilClass
     # ./app/controllers/users_controller.rb:17:in `show'
     # ./spec/requests/user_pages_spec.rb:60:in `block (3 levels) in <top (required)>'
我的用户模型中确实有microposts方法:

has_many :microposts, dependent: :destroy
下面是我在user show视图中添加的代码:

    <% if current_user?(@user) %>
      <section>
        <%= render 'shared/micropost_form' %>
      </section>
    <% end %>
所以,在开发和生产中,一切似乎都很顺利,我不明白为什么我的测试不能通过。。。在我在用户配置文件页面中添加micropost表单之前,他们通过了


如果有人能解释问题所在,我将非常感谢您的帮助

我不知道rspec,但错误消息表明nil没有microposts方法,这意味着用户返回的是nil而不是用户实例。

根据您的测试规范,我认为您正在访问用户路径,但没有登录任何用户。因此,在规范执行期间,当前_用户为零。你需要像这样的东西

before do
    sign_in(user)
    visit user_path(user)
end

其中,
sign_in
是一个驻留在spec/utilities.rb的函数(在我的教程版本中)。它应该在前面的几章中出现。

这就解决了它!非常感谢:)
def show
    @user = User.find(params[:id])
    @microposts = @user.microposts.paginate(page: params[:page])
    @micropost = current_user.microposts.build
end
before do
    sign_in(user)
    visit user_path(user)
end