【发布时间】:2013-03-14 16:13:10
【问题描述】:
我正在尝试单独测试我的控制器的动作链。具体来说,我想确保将我想要的行为应用于我的所有控制器的操作。例如,测试我的所有操作是否需要身份验证:
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 中正在执行路由。有必要吗?
【问题讨论】:
标签: ruby-on-rails testing rspec controllers