我有两个用户角色,我想在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
答案 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中更改但在内存中的确切实例中不更改的