8
我試圖測試一個控制器,在我的應用程序正在使用的引擎內。規範不在引擎內,但在應用程序本身(我試圖在引擎內測試,但也有問題)。Rails引擎:rake路由顯示其路由,但在rspec執行「無路由匹配」引發
我的引擎具有以下的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
參數。
什麼可能是錯的?
同意。請注意,只有引擎具有獨立的名稱空間時纔是如此。 –
這幫助我解決了甚至與Rails引擎無關的問題。我試圖訪問嵌套在資源內部的集合路由,並且唯一可以通過有效路由來識別該行爲的方法是傳入'use_route::name_of_route'。謝謝! –