我有一个Rails 3.2.15应用程序,其引擎安装如下routes.rb
顶部:
mount Service::Engine => '/'
在测试我的应用程序时,我想使用路由url_helpers作为我的引擎,如果路由不存在,则回退到主应用程序。
例如,我在主app(rake routes
输出)中有这条路线,它在引擎中不存在:
manager_account GET /manager/accounts/:id(.:format) manager_accounts#show
我在spec_helper.rb
中包含了应用程序和引擎的url_helpers:
RSpec.configure do |config|
config.include Service::Engine.routes.url_helpers, type: :feature
config.include Rails.application.routes.url_helpers, type: :feature
end
我的问题是,当我尝试在我的规范中调用manager_account_path(account)
时,我收到以下错误:
ActionController::RoutingError:
No route matches {:action=>"show", :controller=>"manager_accounts", :id=>...
如果我将其称为main_app.manager_account_path(account)
,那么它会成功,但我真的希望避免每次都指定它。有没有办法设置这个我可以使用我的url_helpers,以便如果引擎中不存在路由,它将回退到基础应用程序?
答案 0 :(得分:0)
您似乎正在尝试在主应用中测试引擎代码。我建议使用引擎提供的虚拟应用程序来测试引擎代码。
根据Rails guide:
当生成引擎时,在test / dummy处创建一个较小的虚拟应用程序。该应用程序用作发动机的安装点,使发动机的测试非常简单。您可以通过在目录中生成控制器,模型或视图来扩展此应用程序,然后使用它们来测试您的引擎。
测试目录应该被视为典型的Rails测试环境,允许进行单元,功能和集成测试。