检查 rspec FactoryBot 中的用户角色

Checking user roles in rspec FactoryBot

我有两个用户角色,我想在 rspec 中编写一个测试来查看用户角色是否在创建后附加到用户。此外,管理员应该能够将用户角色从一个切换到另一个。

这是我的用户模型,我如何使用枚举构建用户类型

 enum role: [:batman, :superman]
  after_initialize :set_default_role, :if => :new_record?

  protected 

  def set_default_role
    self.role ||= :batman
  end

我被困在下面的测试中,不确定如何检查角色是否已成功附加。还有一种方法可以检查是否可以为用户更改用户角色?例如,如果用户是使用蝙蝠侠角色创建的,则可以切换到超人?

RSpec.describe User, type: :model do

  before do
    @user = FactoryBot.create(:user)
  end

  describe "creation" do
    it "can be created" do
      expect(@user).to be_valid
    end
  end
end

您也可以为模型字段编写期望值。代码很漂亮self-explanatory:

let(:user){ create(:user) }

it "has role batman" do
  expect(user.role).to eq("batman")
end

要更改:

it "changes role" do
  expect{
    do_something_with(user)
  }.to change{ user.reload.role }.from("batman").to("superman")
end

reload 在模型测试中可能不需要,但通常用于其他 (request/system/etc),其中记录可以在 db 中更改,但不能在内存中的确切实例中更改。