我是rpsec w Rails 3的新手....我刚刚在我的Rails 3应用程序中添加了CanCan权限。我想添加测试用例,但我并不是百分之百确定他们应该居住的地方。
如果我想编写测试来检查权限。这些应该在控制器中吗?该模型?还有其他什么地方?
类似:
@user1 = belongs to @group
@user2 does not
@user1.should be_able_to(:destroy, @group.new(:user => user))
@user2. should_not be_able_to(:destroy, @group.new(:user => user))
由于
答案 0 :(得分:3)
不错的问题,我认为它们应该存在于model specs文件夹中,甚至可以作为您正在测试的模型的描述块添加。像
这样的东西# in user_spec.rb
describe "user abilities" do
let(:group) { Factory(:group) }
let(:user) { Factory(:user, :group => group) }
it "should be able to destroy his group" do
user.should be_able_to(:destroy, group)
end
it "should not be able to destroy other groups" do
Factory(:user).should_not be_able_to(:destroy, group)
end
# if be_able_to macro define its error message
# you could also do this kind of specs with
# automatic failure message and spec descriptions
subject { Factory(:user) }
it { should be_able_to(:destroy, subject.group) }
end
由于您正在指定用户能力,我认为user_spec.rb
是存储它们的最佳位置。
答案 1 :(得分:3)
我不认为这些测试应该属于模型,因为我不希望模型对象需要知道用户会话。我宁愿在控制器中处理这个逻辑。
此外,您可以创建一个ability_spec来测试您的cancan配置,但不能证明您实际使用的是您定义的授权规则。您可以轻松配置cancan以禁止操作,在执行该操作之前从不检查授权,最终忽略您自己的规则。因此,我倾向于在授权和未授权情况下测试控制器的行为,而不是测试我的授权规则的实现。