我有一个控制器,在我的测试中我想这样做:
%i(index show new create edit update destroy publish suspend).each do |action|
# code
end
但它很冗长,我需要在许多测试中做到这一点。我知道我可以做到以下几点:
ProjectsController.instance_methods.take(8).each do |action|
# code
end
但它很脆弱,特别是如果我们删除:suspend动作。是否有一种获取控制器文件中定义的所有方法的方法,而不是更多。
答案 0 :(得分:2)
你可以做到
ProjectsController.action_methods
在你的考试中。将返回任何公共方法。请记住,将任何非操作方法定义为私有
如果您想为多个控制器执行此操作,可以查看shared example。
例如
shared_examples "test actions" do
controller_class.action_methods.each do |action|
<your tests>
end
end
并在您的测试文件中,简单说
it_behaves_like "test actions"