我正在尝试单独测试我的控制器的动作链。具体来说,我想确保我想要的行为适用于我的所有控制器的操作。例如,测试我的所有操作是否需要身份验证:
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 中进行。这是必要的吗?