コントローラーのアクション チェーンを単独でテストしようとしています。具体的には、目的の動作がコントローラーのすべてのアクションに確実に適用されるようにしたいと考えています。たとえば、すべてのアクションで認証が必要であることをテストします。
context "when not authenticated" do
# single case
describe "GET index" do
it "responds with 401" do
get :index
response.code.should be(401)
end
end
# all of them...
described_class.action_methods.each do |action|
['get', 'put', 'post', 'delete', 'patch'].each do |verb|
describe "#{verb.upcase} #{action}" do
it "responds with 401" do
send verb, action
response.code.should == "401"
end
end
end
end
end
私はこれがうまくいくと思っていましたが、そうではありません。私はいくつかを取得しますActionController::RoutingErrors
。これは、一部のルートでパラメーターが必要であり、場合によってはそれらを提供していないためです ( を呼び出す場合などpost :create
)。わかりました。しかし、私が理解できないのは、なぜそれが重要なのですか!?
これらのテストでは、ルーティングは別の問題です。私は自分の要求ではなく、自分のアクション チェーンを気にします (それが私が持っているものでありrouting specs
、request specs
目的です)。このレベルでは、ルートの制約について気にする必要はありません。
私の質問: リクエストをシミュレートせずにアクション チェーンだけをテストする方法はありますか?
編集:いくつかの研究
TestCase#processでルートが実行されているようです。これは必要ですか?