2014-04-07 12 views
9

yüzden hata almaya devam ... Raylar Engine Maçlar: testinde atılırYolu Yok

No route matches {:action=>"create", :controller=>"xaaron/api_keys"}

: Ben spec/dummy gidip rake routes çalıştırmak

it "should not create an api key for those not logged in" do 
    post :create 
    expect(response).to redirect_to xaaron.login_path 
end 

Gördüğüm komut:

 api_keys GET /api_keys(.:format)     xaaron/api_keys#index 
       POST /api_keys(.:format)     xaaron/api_keys#create 
    new_api_key GET /api_keys/new(.:format)    xaaron/api_keys#new 
    edit_api_key GET /api_keys/:id/edit(.:format)  xaaron/api_keys#edit 
     api_key GET /api_keys/:id(.:format)    xaaron/api_keys#show 
       PATCH /api_keys/:id(.:format)    xaaron/api_keys#update 
       PUT /api_keys/:id(.:format)    xaaron/api_keys#update 
       DELETE /api_keys/:id(.:format)    xaaron/api_keys#destroy 

Bunu gösterir evet bu rota var. Rotalarım bu motor için şu şekilde görünüyor:

Xaaron::Engine.routes.draw do 
     get 'login' => 'sessions#new', :as => 'login' 
     get 'logout' => 'sessions#destroy', :as => 'logout' 
     get 'signup' => 'users#new', :as => 'signup' 
     get 'permission_denied' => 'error#denied', :as => 'permission_denied' 
     get 'record_not_found' => 'error#error', :as => 'record_not_found' 
     get 'password_reset' => 'password_resets#edit', :as => 'rest_user_password' 

     resource :error, controller: 'error' 

     resources :users 
     resources :api_keys 
     resources :sessions 
     resources :roles 
     resources :password_resets 
end 

Neyi eksik?

güncelleme meraklı olanlar için

Bunları yolları alıyorum, nasıl onun kukla uygulamanın yolları dosyası (varsayılan olarak) gibi kurulur çünkü:

Rails.application.routes.draw do 

    mount Xaaron::Engine => "/xaaron" 
end 

Güncelleme II

this api docs on how routing is done in engines okuyordum ve bu şekilde yaptığımın doğru olduğuna inanıyorum, denetleyici şu şekilde tanımlıyor:

module Xaaron 
    class ApiKeysController < ActionController::Base 
    before_action :authenticate_user! 

    def index 
     @api_key = Xaaron::ApiKey.where(:user_id => current_user.id) 
    end 

    def create 
     @api_key = Xaaron::ApiKey.new(:user_id => current_user.id, :api_key => SecureRandom.hex(16)) 
     create_api_key(@api_key) 
    end 

    def destroy 
     Xaaron::ApiKey.find(params[:id]).destroy 
     flash[:notice] = 'Api Key has been deleted.' 
     redirect_to xarron.api_keys_path 
    end 
    end 
end 
+0

teşekkür ederiz. Mount'da biraz araştırma yapacağım. Api_keys denetleyicisi nasıl tanımlanır? Xaaron modülünde mi? Lütfen bazı belirli ayrıntıları/kodu paylaşın. –

+0

@KirtiThorat uygun güncellemeler yapılmıştır. belirtildiği gibi, ayrıca, özellikle motorlarda rotaların nasıl çalıştığını daha iyi anlamak için http://api.rubyonrails.org/classes/Rails/Engine.html. ve bunu doğru bir şekilde yapmam gerektiğine inanıyorum - basit bir şey eksik olmalıyım. – user3379926

cevap

17

Sen motoru yolları kullanan senin spec söylemek gerekir: güncelleme için

describe ApiKeysController do 
    routes { Xaaron::Engine.routes } 

    it "should not create an api key for those not logged in" do 
    post :create 
    expect(response).to redirect_to xaaron.login_path 
    end 
end 
+0

Gerçekten mi? Belgelerinin bir kısmı nerede? – user3379926

+1

https://www.relishapp.com/rspec/rspec-rails/v/2-14/docs/routing-specs/engine-routes –

+0

+1 Bu oldukça basitti! Bunu bilmiyordum. : p –