Hartl Rails教程第11.1.2节测试问题

时间:2015-04-28 21:48:48

标签: ruby-on-rails railstutorial.org

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

require 'test_helper'

类MicropostTest<的ActiveSupport ::测试用例

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`

类Micropost<的ActiveRecord :: Base的    belongs_to:用户    验证:user_id,presence:true 端

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

ERROR [“test_should_be_valid”,MicropostTest,0.255918787]  test_should_be_valid#MicropostTest(0.26s) NoMethodError:NoMethodError:未定义的方法id' for nil:NilClass test/models/micropost_test.rb:8:in setup'         test / models / micropost_test.rb:8:在`setup'

ERROR [“test_user_id_should_be_present”,MicropostTest,0.260151448]  test_user_id_should_be_present#MicropostTest(0.26s) NoMethodError:NoMethodError:未定义的方法id' for nil:NilClass test/models/micropost_test.rb:8:in setup'         test / models / micropost_test.rb:8:在`setup'

有人能引导我朝着正确的方向前进吗?谢谢!

2 个答案:

答案 0 :(得分:1)

我认为错误就在这一行:

@users = users(:michael)

应该是@user without s

@user = users(:michael)

因为您在此行中使用了@user变量

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

答案 1 :(得分:0)

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