2017-06-15 4 views
2

Je développe un moteur Rails en utilisant rails v5.1.0 et rspec-rails 3.5.2.Spécification des fonctionnalités RSpec impossible de trouver les routes pour Rails Engine

J'ai simple spec fonction:

require "rails_helper" 

module MyEngineName 
    RSpec.feature "Some Feature", type: :feature do 
    it "user can navigate to page and blah blah", :js do 
     visit edit_job_path(1) 
     # .... other stuff 
    end 
    end 
end 

Cela soulève l'erreur

undefined method `edit_job_path' for #<RSpec::ExampleGroups::SomeFeature:0x007fc098a570e8> 

parce que l'aide de la route edit_job_path ne peut pas être trouvé.

Y at-il quelque chose de spécial que je dois faire pour permettre à mes caractéristiques d'accéder à mes routes de moteur?

La documentation RSpec mentions that you can specify the engine routes, mais cela semble être uniquement pour les spécifications de routage. Quand je l'ai ajouté aux caractéristiques de fonctionnalité, il échoue avec undefined method 'routes'

Merci!

EDIT: Depuis que mon fichier de routes a été demandé, en l'ajoutant ici. Il est assez court -

# config/routes.rb 
MyEngineName::Engine.routes.draw do 
    root to: redirect("/my_engine_name/jobs") 
    resources :jobs 
end 

Liste de toutes les routes de râteau

> rake app:routes 
    .... 
    .... 

Routes for MyEngineName::Engine: 
    root GET /      redirect(301, /my_engine_name/jobs) 
    jobs GET /jobs(.:format)   my_engine_name/jobs#index 
     POST /jobs(.:format)   my_engine_name/jobs#create 
new_job GET /jobs/new(.:format)  my_engine_name/jobs#new 
edit_job GET /jobs/:id/edit(.:format) my_engine_name/jobs#edit 
    job GET /jobs/:id(.:format)  my_engine_name/jobs#show 
     PATCH /jobs/:id(.:format)  my_engine_name/jobs#update 
     PUT /jobs/:id(.:format)  my_engine_name/jobs#update 
     DELETE /jobs/:id(.:format)  my_engine_name/jobs#destroy 
+0

Montrez votre fichier 'routes.rb', au moins deux ou trois premières lignes. – chumakoff

+0

@chumakoff - Edité le poste avec elle. Merci! – user2490003

Répondre

1

Quelque chose de cela devrait aider. Assurez-vous que vous avez MyEngineName::Engine.routes, pas MyEngineName.routes

require "rails_helper" 

module MyEngineName 
    RSpec.feature "Some Feature", type: :feature do 
    routes { MyEngineName::Engine.routes } 

    it "user can navigate to page and blah blah", :js do 
    # ... 

ou (autre solution)

# place this in `spec/rails_helper.rb` file 
RSpec.configure do |config| 
    config.before :each, type: :feature do 
    helper.class.include MyEngineName::Engine.routes.url_helpers 
    end 
end 
+0

Merci! La première approche renvoie une erreur - 'méthodes 'non définies' pour RSpec :: ExampleGroups :: SomeFeature: Class (NoMethodError)' - car je ne pense pas 'routes' est une définition de méthode valide (je ne sais pas pourquoi?). La seconde montre quelques promesses, car elle était capable de reconnaître 'edit_job_path'! Mais il a lancé une erreur en essayant de charger les assets pour cette page - 'No route matches [GET]" /assets/my_engine_name/application-(fingerprint).js "'. Que * kinda * fait depuis que cette route n'est pas définie par les aides route non? Je n'ai également aucune idée de la raison pour laquelle les empreintes digitales sont dans l'environnement 'test' ... Merci! – user2490003