You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RSpec测试异常:创建Wiki时未赋值数据库默认值返回nil

解决你的RSpec测试默认值不生效问题

嘿,这个坑我之前也踩过!先给你最直接的解决方案试试,大概率能搞定:

最可能的原因:Active Record缓存未刷新

当你通过POST请求创建Wiki后,Wiki.last返回的是Active Record缓存的对象——它并没有从数据库重新读取category字段,而数据库的默认值是在插入记录后才生效的,所以缓存的对象里category还是nil。

修改你的测试代码,加上reload就能拿到数据库里的实际值:

it 'defaults to uncategorized when none is given' do
  post wikis_path(params: { wiki: { content: 'Some content' }})
  expect(Wiki.last.reload.category).to eq('uncategorized')
end

试试这个,应该就能通过了!

其他可能的排查方向

如果上面的方法没解决,再检查下面这几个点:

1. 测试环境数据库是否同步了迁移

开发环境的数据库生效不代表测试环境也同步了,执行命令确保测试环境的数据库已经应用了包含默认值的迁移:

rails db:migrate RAILS_ENV=test
# Rails 5+ 也可以用:
rails db:test:load

2. 模型是否覆盖了数据库默认值

检查你的app/models/wiki.rb,有没有设置和数据库默认值冲突的属性默认,比如:

# 这种代码会覆盖数据库的默认值,导致category为nil
attribute :category, :string, default: nil

如果有,删掉或者改成和数据库一致的default: 'uncategorized'。

3. 强参数配置(可选)

虽然不是必须,但确保控制器的强参数允许category字段,避免Active Record处理参数时出现异常:

def wiki_params
  params.require(:wiki).permit(:content, :category)
end

(注:即使请求里没传category,permit只是允许该字段通过,不会强制要求它存在,所以不会影响默认值逻辑)


内容的提问来源于stack exchange,提问作者oneWorkingHeadphone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:14:01