Rails minitest测试时Article模型验证不通过是什么原因?
问题根因
Rails 5及以上版本中,belongs_to关联默认开启必填校验,你的Article模型定义了belongs_to :user,但测试的setup方法初始化@article时没有关联合法的User对象,导致模型校验失败,第一个测试返回false。
其余测试可以正常通过的原因是:这两个测试的断言本身就预期@article.valid?返回false,缺失user触发的校验失败刚好符合测试预期,因此不会报错。
修复方案
- 方案一:在测试初始化时关联合法的User对象
调整setup方法,先创建测试用User实例,再赋值给@article:def setup # 字段参数按照你实际User模型的校验规则调整即可 @user = User.create!(name: "测试用户", email: "test@demo.com", password: "123456") @article = Article.new(title:"Avengers Endgame", body:"I am inevitable", user: @user) end - 方案二:如果业务允许Article不需要关联用户,关闭
belongs_to的必填校验
修改article.rb中的关联定义:belongs_to :user, optional: true
通用调试技巧
后续遇到类似Expected false to be truthy的通用校验报错时,可以在断言前打印模型的错误信息快速定位问题:
test "article should be valid" do # 校验失败时输出具体错误原因 puts @article.errors.full_messages unless @article.valid? assert @article.valid? end
运行测试后会输出具体的校验失败字段,本次场景会打印User must exist,可以直接定位到关联缺失问题。
内容的提问来源于stack exchange,提问作者jbeachy
相关产品推荐
相关产品推荐

