-1
我想我cancancan能力使用測試cancancan能力rspec的測試使用RSpec
,但相對於測試有什麼特定的用戶可以做的,我想考什麼,用戶不應該能夠做到。
現在,我有上下文的塊,像這樣:
context "for a manager" do
before do
@manager = FactoryGirl.build(:user, :manager)
@ability = Ability.new(@manager)
end
it "should not be able to create Questions" do
expect(@ability).not_to be_able_to(:create, Question.new)
end
it "should not be able to read Questions" do
expect(@ability).not_to be_able_to(:read, Question.new)
end
it "should not be able to update Questions" do
expect(@ability).not_to be_able_to(:update, Question.new)
end
it "should not be able to delete Questions" do
expect(@ability).not_to be_able_to(:destroy, Question.new)
end
end
這清楚地表明manager
類型的用戶不應該有任何形式的訪問Question
模型。
是否有直接的方式來寫這整個塊在一個單一的it
塊,只有一個expect
?
我曾經想過寫它如下:
context "for a manager" do
before do
@manager = FactoryGirl.build(:user, :manager)
@ability = Ability.new(@manager)
end
it "should not be able to manage Questions" do
expect(@ability).not_to be_able_to(:manage, Question.new)
end
end
但我想,這可能不一定做我打算就這樣做,因爲這個測試將通過是多達一沒有授予該資源的能力。
總之,是否有直接的方法來測試這種情況?謝謝大家。
謝謝,@Nuno科斯塔。然而,我正在尋找一種方法來測試'不能做'的能力,而不是'能做'的能力。 例如: '它{is_expected.not_to be_able_to(:管理,Question.new)}' ,而不是: '它{is_expected.to be_able_to(:管理,Question.new)}' –
我已經更新了我的答案。檢查這4個操作可能還不夠,因爲您可能在控制器中有額外的操作。請參閱https://github.com/CanCanCommunity/cancancan/wiki/Action-Aliases –