我正在尝试测试我的应用程序正在使用的引擎内部的控制器。规范不在引擎中,而是在应用程序本身中(我尝试在引擎中进行测试,但也遇到了问题)。
我的引擎有以下 routes.rb:
Revision::Engine.routes.draw do
resources :steps, only: [] do
collection { get :first }
end
end
引擎通常安装在应用程序 routes.rb 上:
mount Revision::Engine => "revision"
当我运行rake routes
时,在最后几行我得到:
Routes for Revision::Engine:
first_steps GET /steps/first(.:format) revision/steps#first
root / revision/steps#first
在我的引擎控制器 ( lib/revision/app/controllers/revision/steps_controller.rb
) 上,我有:
module Revision
class StepsController < ApplicationController
def first
end
end
end
在 Rspec 上,我使用以下方法测试此控制器:
require 'spec_helper'
describe Revision::StepsController do
it "should work" do
get :first
response.should be_success
end
end
然后当我运行这个规范时,我得到:
ActionController::RoutingError:
No route matches {:controller=>"revision/steps", :action=>"first"}
为了确保该路线并不真正存在,我将其添加到规范中:
before do
puts @routes.set.to_a.map(&:defaults)
end
结果是这样的:
[...]
{:action=>"show", :controller=>"devise/unlocks"}
{:action=>"revision"}
它只有:action
参数。
可能有什么问题?