首页 文章

Hartl Rails教程第11.1.2节测试问题

提问于
浏览
-1

在第11章开头遇到问题 . 在第10章结束时测试绿色后,我将代码清单11.2添加到tests / models / micropost_test.rb

require 'test_helper'

MicropostTest类<ActiveSupport :: TestCase

def setup
    @users = users(:michael)
    # This code not idiomatically correct.
    @micropost = Micropost.new(content: "Lorem ipsum", user_id: @user.id)
end

test "should be valid" do
    assert @micropost.valid?
end

test "user id should be present" do
    @micropost.user_id = nil
    assert_not @micropost.valid?
end

结束

并且可以预见得到一个RED . 将清单11.4中的验证添加到app / model / s / micropost.rb`

class Micropost <ActiveRecord :: Base belongs_to:user validates:user_id,presence:true end

问题是我在测试时继续遇到以下错误:

错误["test_should_be_valid",MicropostTest,0.255918787] test_should_be_valid#MicropostTest(0.26s)NoMethodError:NoMethodError:undefined method id' for nil:NilClass test/models/micropost_test.rb:8:in setup ' test/models/micropost_test.rb:8:in `setup'

错误["test_user_id_should_be_present",MicropostTest,0.260151448] test_user_id_should_be_present#MicropostTest(0.26s)NoMethodError:NoMethodError:undefined method id' for nil:NilClass test/models/micropost_test.rb:8:in setup ' test/models/micropost_test.rb:8:in `setup'

任何人都可以引导我朝着正确的方向前进吗?谢谢!

2 回答

  • 1

    我认为错误在这一行:

    @users = users(:michael)
    

    它应该是@user without s

    @user = users(:michael)
    

    因为你在这一行使用了@user变量

    @micropost = Micropost.new(content: "Lorem ipsum", user_id: @user.id)
    
  • 0

    答案结果是我安装了一个旧的“protected_attributes”gem . 你不能使用它和强大的参数 . 卸载后,我可以从模型中删除旧的attributes_accessible行,并传递所有测试 .

相关问题