デフォルトスコープのRspec
概要
ユーザーモデル:
default_scope { where(:flg => '0') }
enum deleted_flg: { disabled: '1', enabled: '0' }
ユーザー仕様:
describe 'default scope' do
it 'returns deleted_flg' do
user = build(:user, first_name: 'Test', flg: "0")
expect(user.deleted_flg).to eq "enabled"
end
end
私が書いた仕様がデフォルトのスコープに対して正しいかどうかはわかりません。
助けていただければ幸いです。
解決策
「デフォルトのスコープ」は、モデルに対するすべての操作のマクロ (フィルターや並べ替え順序など) です。
たとえば、これが User というクラスにある場合は、次のように表示されることが予想されます。
User.all # => SELECT * FROM users WHERE deleted_flg = 0
2 つ以上のレコードを作成し、User.all が予期された順序で予期されたレコードを返すかどうかを確認することでテストできます (該当する場合)。例えば:
describe 'default scope' do
it 'returns enabled users only' do
enabled_user = create(:user, flg: '0')
disabled_user = create(:user, flg: '1')
expect(User.all).to eq [enabled_user]
end
end
ボーナス:
enum の真の可能性を最大限に活用していないのです。重要なのは、これらの数値を「人間に優しい」方法で参照できることです。
例えば:
default_scope { where(flg: :enabled) }
# Or even:
default_scope { enabled }
そして:
disabled_user = create(:user, flg: :disabled)
詳細については、ドキュメントを参照してください。