5

我有一个 Rails 3.2.15 应用程序,在顶部安装了一个 Engine,如下所示routes.rb

mount Service::Engine => '/'

在测试我的应用程序时,我想为我的引擎使用路由 url_helpers,如果该路由不存在,则回退到主应用程序。

例如,我在主应用程序(rake routes输出)中有这条路线,它在引擎中不存在:

manager_account  GET  /manager/accounts/:id(.:format)     manager_accounts#show

我将应用程序和引擎的 url_helpers 包括在spec_helper.rb

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

4

1 回答 1

0

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

根据Rails 指南

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

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

于 2015-02-23T03:09:20.367 回答