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

关于默认作用域(Default Scope)的Rspec测试是否正确的咨询

你的默认作用域测试用例不正确,原因及修正方案如下

问题分析

你当前的测试用例只是验证了enum的属性映射关系,完全没触及默认作用域的核心功能:默认作用域是在执行数据库查询时自动过滤flg = '0'的记录,而你用build(:user)只是在内存中创建对象,不会触发任何数据库查询,自然无法测试默认作用域的效果。

正确的测试思路

要测试默认作用域,需要验证:当数据库中存在不同flg值的用户时,执行User.all(或其他查询方法)只会返回flg = '0'的用户。

修正后的测试用例

describe 'default scope' do
  it '只返回flg为"0"的用户' do
    # 创建两个用户,一个符合默认作用域条件,一个不符合
    enabled_user = create(:user, flg: "0")
    disabled_user = create(:user, flg: "1")

    # 执行查询,验证结果只包含符合条件的用户
    expect(User.all).to include(enabled_user)
    expect(User.all).not_to include(disabled_user)
  end
end

补充说明

  • 用create而不是build:create会把对象存入数据库,这样才能触发基于数据库查询的默认作用域逻辑。
  • 单独验证enum映射(可选):如果你需要单独验证enum的映射关系,可以单独写一个测试用例:
describe 'deleted_flg enum' do
  it '正确映射flg值到enum状态' do
    enabled_user = build(:user, flg: "0")
    expect(enabled_user.deleted_flg).to eq("enabled")

    disabled_user = build(:user, flg: "1")
    expect(disabled_user.deleted_flg).to eq("disabled")
  end
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:22:12