2017-06-15 34 views
2

rails v5.1.0rspec-rails 3.5.2を使用してRailsエンジンを開発しています。RSpec機能仕様でRailsエンジンのルートが見つかりません

私は、単純な機能の仕様があります:ルートヘルパーedit_job_pathを見つけることができないので、これはエラー

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

を提起

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 

を。

フィーチャー仕様でエンジンルートにアクセスするために必要なことがありますか?

RSpecのドキュメントmentions that you can specify the engine routesですが、ルーティング仕様の場合にのみ表示されます。機能仕様に追加したときに失敗しますundefined method 'routes'

ありがとう!

EDIT:私のルートファイルが要求されたので、ここに追加します。このことから何かが助けるべきレーキからのすべてのルートの

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

一覧

> 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

はあなた 'routes.rb'ファイル、最初の行の少なくともカップルを表示しません。 – chumakoff

+0

@chumakoff - それを使って投稿を編集しました。ありがとう! – user2490003

答えて

1

- それはかなり短いです。あなたはMyEngineName::Engine.routesを持っていることを確認し、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 
    # ... 

または(別のソリューション)

# 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

ありがとう!最初の方法は、 'routes'が有効なメソッド定義ではないと思うので、RSpec :: ExampleGroups :: SomeFeature:Class(NoMethodError)'のための '未定義のメソッド 'routes'というエラーをスローします。 'edit_job_path'を認識できるようになったので、2つ目は約束を示しています!しかし、そのページのアセットを読み込もうとするときにエラーが発生しました。 - [経路は[GET]と一致しません "/assets/my_engine_name/application-(fingerprint).js" 'そのルートはルートヘルパーによって正しく定義されていないので、それはちょっとですか?なぜ私はテスト環境で資産を指紋採取しているのか分かりません...ありがとう! – user2490003

関連する問題