如何在Rails引擎的规范中使用命名路由?

时间:2014-11-12 00:29:01

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

我有一个定义了engine.rb的Rails引擎:

module Keywords
  class Engine < ::Rails::Engine
    isolate_namespace Keywords
end

我定义了一些路线:

Keywords::Engine.routes.draw do
  resources :keyword_groups,  only: [:new] 
end

现在,在我的虚拟应用程序中,一切都很好。我可以使用变量keywords.new_keyword_group_path来获取我的路径的网址。

然而,当我尝试在使用水豚的我的rspec测试中做同样的事情时,它失败了!我尝试按照建议将以下行添加到我的spec_helper.rb中:

config.include Keywords::Engine.routes.url_helpers

但是,当我尝试在我的测试中使用以下行时:

visit keywords.new_keyword_group_path

我收到以下错误:

NameError: undefined local variable or method `keywords' for #<RSpec::Core::ExampleGroup::Nested_1:0x00000108833390>

如果我试图取消&#34;关键字&#34;前缀,并执行:

visit new_keyword_group_path

我收到此错误:

ActionController::RoutingError: No route matches [GET] "/keyword_groups/new"

这有道理,因为路径应该是&#34; / keywords / keyword_groups / new&#34;。

如何让包含的url助手使用正确的名称空间前缀?

1 个答案:

答案 0 :(得分:1)

我找到了一个基于Spree gem的解决方案。为前缀创建一个辅助方法,以便从引擎路径中获取路径,如下所示:

def keywords
  Keywords::Engine.routes.url_helpers
end

然后keywords.new_keyword_path就像一个魅力