相关疑难解决方法(0)

是否仍然建议使用Minitest测试Rails 4中的路由?

在Rails 3中,当在MiniTest中编写功能测试时,我养成了测试路由与测试控制器操作分开的习惯.我从Rails指南测试中得到了这个想法- 第9节:测试路径.但是,在将我的应用程序升级到Rails 4之后,我注意到如果我没有为get|patch|post|delete方法提供一组适当的参数,那么控制器动作测试本身已经开始涉及未知路由.

例如,给定路线:

# config/routes.rb
namespace "api" do
  namespace "v2", defaults: { format: :json } do
    resources :users do
      resources :posts do
        resources :comments
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

和功能测试:

# test/controllers/api/v2/comments_controller_test.rb
describe Api::V2::CommentsController
  it "does something" do
    get :index
  end
end
Run Code Online (Sandbox Code Playgroud)

在Rails 3中,上述方法可行.但在Rails 4中,我收到了URL生成错误:

ActionController :: UrlGenerationError:没有路由匹配{:action =>"index",:controller =>"api/v2/comments"}

从这里我可以推断,get当试图找到控制器和动作时,帮助器根本无法匹配路由文件中的路由.很公平.我可以通过更改get调用来解决这个问题,以包含满足嵌套路由所需的参数,如下所示:

# test/controllers/api/v2/comments_controller_test.rb
describe Api::V2::CommentsController
  it "does something" do
    get :index, { user_id: "1", post_id: "1" }
  end
end …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails minitest ruby-on-rails-4

6
推荐指数
1
解决办法
1333
查看次数

标签 统计

minitest ×1

ruby ×1

ruby-on-rails ×1

ruby-on-rails-4 ×1