在Rspec中组合Rails引擎和基础应用程序的url_helpers

时间:2013-11-08 19:37:50

标签: ruby-on-rails rspec rails-engines

我有一个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,以便如果引擎中不存在路由,它将回退到基础应用程序?

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试在主应用中测试引擎代码。我建议使用引擎提供的虚拟应用程序来测试引擎代码。

根据Rails guide

  

当生成引擎时,在test / dummy处创建一个较小的虚拟应用程序。该应用程序用作发动机的安装点,使发动机的测试非常简单。您可以通过在目录中生成控制器,模型或视图来扩展此应用程序,然后使用它们来测试您的引擎。

     

测试目录应该被视为典型的Rails测试环境,允许进行单元,功能和集成测试。