测试失败::的ActionView ::模板错误:未定义的方法'名”的零:NilClass(

2019-09-30 04:46发布

我有看法show.html.erb

 <%= @question.user.lesson_id %>

这是浏览器的一个数字。

我questions_controller.rb是

 def show
    @question = Question.find(params[:id])
    @comments = @question.comments.all
    if user_signed_in?
            @rating_currentuser = @question.ratings.find_by_user_id(current_user.id)
            unless @rating_currentuser
            @rating_currentuser = current_user.ratings.new
   end
 end

我questions_controller_test.rb

   test "should show question signed in" do
    sign_in users(:user2)
    get :show, :id => @question_user1.to_param
    assert_response :success
   end

并且一切正常(浏览器和测试)

当改变视图show.html.erb

   <%= @question.user.lesson.name %>

我用的浏览器正常,但会失败,并测试

   ActionView::Template::Error: undefined method `name' for nil:NilClass.

我试试这个

  @name = Lesson.find(params[:id])

在questions_controller.rb然后测试失败

  Expected response to be a <:success>, but was <302>

类似的问题在这里 在这里 ,并在这里

Answer 1:

使用try有可能掩盖了潜在的问题。

例如,当我有这个错误是因为我没有被无固定了正确的外键引用创建一个模型对象 - 例如Product.ProductType.name - 视图使用的名称属性的FK关联渲染。 如果我用了尝试要解决它,它会掩盖了我的测试此故障这将在测试中已经不可取。 有一次,我已经加入了正确的引用一切工作,因为它应该,无需尝试有(:名称)。



Answer 2:

从溶液中这个答案

是使用try方法和更改视图

<%= @question.user.lesson.try(:name) %>


文章来源: Test fail with ActionView::Template::Error: undefined method `name' for nil:NilClass