2011-11-15 42 views
2

我有几个'管理员'控制器,所有这些控制器都从AdminController继承,它具有之前的过滤器,它仅限制对管理员的访问。如何测试前面几个控制器/操作中的过滤器?

我想要我的功能测试来检查只有管理员可以访问属于我的管理系统的每个控制器的每个动作。什么是最简洁的方式来做到这一点?

(我使用的是内置的测试/单元的标准)

回答

2

我认为最简洁的方式是通过元编程:

AdminController.subclasses.each do |controller| 
    describe controller do 
    controller.action_methods.each do |action_method| 
     it "redirects non-admin user on #{action_method}" do 
     get action_method 
     assert_redirected_to home_path 
     end 
    end 
    end 
end 

你必须处理得与职位,可能有一些错别字,但希望能给你一些启动。 (此外,这是使用minispec语法,你必须翻译一下测试/单元。)

我可能会建议只是在控制器的基础上添加简单的测试,但这是可能是一个很好的集成测试,以确保你不会错过任何。

+0

谢谢,AdminController.subclasses和controller.action_methods是我所需要的。我创建了一个'http_method_for_action(action)'方法来猜测应该使用哪个http方法。 –

相关问题