[英]Rails rspec testing factorybot returning symbol
我想看看用戶是否有權訪問我的應用程序中的某些頁面。 為此,我使用rSpec
和FactoryBot
作為我的燈具替換。
我有兩個工廠,一個用於具有has_many
用戶的role
,一個用於belongs_to
一個role
的user
。
角色工廠
FactoryBot.define do
factory :role do
trait :admin do
role_name 'admin'
end
end
factory :admin, traits: [:admin]
end
用戶工廠
FactoryBot.define do
factory :user do
association :role, factory: :admin
end
end
我正在使用Pundit進行Authorizatin,而使用Pundit Matchers來測試Pundit策略。
需要'rails_helper'
describe AccountPolicy do
subject { described_class.new(user, account) }
let (:account) { Account.create }
context 'being an admin' do
let(:user) { User.create(role: :admin) }
it { is_expected.to permit_action([:index]) }
end
end
上面是編寫策略,以查看作為管理員的用戶是否可以訪問“帳戶”索引。 運行rake
,出現以下錯誤。
ActiveRecord::AssociationTypeMismatch:
Role(#70284397401400) expected, got :admin which is an instance of Symbol(#70284363589400)
我看到類型不匹配。 但是,我不確定如何將角色作為活動記錄對象返回,我認為這是它從其外觀(而不是符號)中所期望的。 我該如何實現?
我認為您的問題的一部分在於您的體系結構,但我將在底部解決。
let(:user) { User.create(role: :admin) }
這試圖將角色屬性設置為符號:admin。 而您想傳遞一個實際的管理員角色對象/記錄。
let(:admin_role) { Role.create(:admin) }
let(:user) { User.create(role: admin_role) }
但是,您當前的用戶工廠將角色工廠設置為管理工廠。 因此,默認情況下,所有創建的用戶均為管理員。 您將需要在FactoryBot上進行更多閱讀,以構建工廠,以便更輕松地創建某些類型的用戶。 向用戶模型添加特征以創建正確的角色將有助於您當前的體系結構。
出於好奇,如果用戶只能擁有一個角色,為什么還要使用一個單獨的表? 為什么不使用User上的enum列?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.