0

我有一个控制器,在我的测试中我想这样做:

%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 操作。是否有一种获取控制器文件中定义的所有方法的方法,仅此而已。

4

1 回答 1

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"
于 2013-06-17T22:03:09.527 回答