【发布时间】:2013-01-11 15:38:37
【问题描述】:
我在我的应用程序中安装了 RailsAdmin 引擎(根据 wiki 的说明)使用
mount RailsAdmin::Engine => '/backend', :as => 'rails_admin'
我不得不从引擎中扩展一个控制器来添加一个 before_filter。 在开发中运行我的应用程序时,我的扩展程序和其他引擎功能运行良好。
但是,我在为 before_filter 编写 使用 Test::Unit 的功能测试时遇到了问题。 过滤器在正确的时刻启动并按预期工作,但是一旦前过滤器“调整”的操作重定向到索引(这是预期结果),我会收到以下路由错误:
ActionController::RoutingError: 没有路由匹配 {:controller=>"rails_admin/main"}
导致异常的代码在于引擎重定向到索引或上一页的方法(引用类型);这是方法的代码
def back_or_index
如果参数[:return_to].presence
参数[:return_to]
其他
索引路径
结束
我发现在开发中运行应用程序时,由 index_path 触发的 url_for 调用提供了正确的 path_segments (即::model_name => 'user'),以便匹配下面的路由
index GET|POST /:model_name(.:format) rails_admin/main#index
另一方面,在运行测试时,未提供 path_segments,因此在寻找匹配路由时不满足 :model_name 约束。
由于我是引擎新手,谁能告诉我我缺少什么?
在我看来,引擎似乎应该考虑到安装生成 index_path 的事实,但正如我所说,我不是这方面的专家......
【问题讨论】:
-
您是否尝试在控制器规范调用中使用
use_route方法?这是我工作过的引擎的一个例子。 github.com/twinge/questionnaire_engine/blob/engine/spec/… -
谢谢你的回复,我已经想通了,但是谢谢!
-
解决方案是什么?
-
看看我的回答
标签: ruby-on-rails-3.2 functional-testing rails-engines rails-admin