मैं एक नियंत्रक का परीक्षण करने की कोशिश कर रहा हूं जो मेरे एप्लिकेशन का उपयोग कर रहे इंजन के अंदर है। कल्पना इंजन के भीतर नहीं है, लेकिन एप्लिकेशन में ही (मैंने इंजन के भीतर परीक्षण करने की कोशिश की लेकिन समस्याएं भी थीं)।रेल इंजन: रेक मार्ग अपने मार्ग दिखाते हैं लेकिन आरएसपीसी निष्पादन पर "कोई मार्ग मिलान नहीं"
मेरे इंजन निम्नलिखित routes.rb है: जब मैं rake routes
चलाने
mount Revision::Engine => "revision"
, पिछले लाइनों मैं पर:
Revision::Engine.routes.draw do
resources :steps, only: [] do
collection { get :first }
end
end
इंजन आवेदन routes.rb सामान्य रूप से पर रखा जाता है :
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"}
सुनिश्चित करें कि मार्ग नहीं है होना करने के लिए वास्तव में मौजूद है, मैंने इसे spec में जोड़ा:
before do
puts @routes.set.to_a.map(&:defaults)
end
और परिणाम यह है:
[...]
{:action=>"show", :controller=>"devise/unlocks"}
{:action=>"revision"}
यह केवल :action
पैरामीटर है।
क्या गलत हो सकता है?
सहमत हुए। ध्यान दें कि यह केवल तभी सही है जब इंजन के पास अलग नामस्थान हो। –
इससे मुझे उस मुद्दे पर मदद मिली जो रेल इंजन से संबंधित नहीं था। मैं संसाधन के अंदर घोंसला वाले संग्रह मार्ग तक पहुंचने का प्रयास कर रहा था, और एकमात्र तरीका यह है कि मैं इसे वैध मार्ग के साथ कार्रवाई को पहचानने के लिए प्राप्त कर सकता हूं, 'use_route:: name_of_route' में पास होना है। धन्यवाद! –