在rspec FactoryBot中检查用户角色

时间:2019-06-29 17:31:38

标签: ruby-on-rails ruby rspec

我有两个用户角色,我想在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

1 个答案:

答案 0 :(得分:2)

您也可以为模型字段编写期望值。代码很不言自明:

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在模型测试中可能不需要,但通常用于其他(请求/系统/等)记录可以在db中更改但在内存中的确切实例中不更改的