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