2017-06-15 85 views
2

我使用rails v5.1.0rspec-rails 3.5.2开发一个Rails引擎的路线。RSpec的功能规格找不到Rails的引擎

我有一个简单的功能规格:

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 

这就提出了一个错误

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

因为路线助手edit_job_path无法找到。

是不是有什么特别的,我需要为了让我的功能规格来访问我的引擎的路线呢?

RSpec的文档mentions that you can specify the engine routes,但这只似乎是路由规格。当我把它添加到功能规范,它失败undefined method 'routes'

谢谢!

编辑:由于被请求我的路线文件,在这里将它添加。这是非常短 - 从耙所有路线的

# 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

谢谢!第一种方法抛出一个错误 - 对于RSpec :: ExampleGroups :: SomeFeature:Class(NoMethodError)'未定义的方法'routes'' - 因为我不认为'routes'是一个有效的方法定义(不知道为什么?)。第二个显示了一些承诺,因为它肯定能够识别'edit_job_path'!但它尝试加载该页面的资源时发生错误 - “无路由匹配[GET]”/assets/my_engine_name/application-(fingerprint).js“'。那*有点*使得这条路线不是由路线助手定义的吗?我也不知道为什么它在'test'环境中指纹资产...谢谢! – user2490003