在第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'
有人能引导我朝着正确的方向前进吗?谢谢!
答案 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行,并传递所有测试。