【问题标题】:Why does my Rails controller test not route?为什么我的 Rails 控制器测试没有路由?
【发布时间】:2014-01-18 07:51:36
【问题描述】:

为什么我的测试用例不起作用,为什么它抱怨找不到路由?它可以在浏览器中运行。

代码

class UsersController < ApplicationController
  def deposit

路线

resources :users do
  post 'deposit', to: :deposit

测试用例

class UsersControllerTest < ActionController::TestCase
  test "deposit" do
    post :deposit, {id: 1} 

日志

UsersControllerTest#test_deposit: ActionController::UrlGenerationError: 没有路由匹配 {:id=>"1", :controller=>"users", :action=>"deposit"}

版本

Rails 4.0.0

实现

我看到了这个,但是当我使用“1”时它没有帮助。 Rails routes issue with controller testing

我看到了这个,但我已经添加了 :id 并且它仍然无法工作。 Testing Rails 4 Controller

【问题讨论】:

    标签: ruby-on-rails ruby unit-testing ruby-on-rails-4


    【解决方案1】:

    原因是你的路由定义不太标准。

    添加 RESTful 操作的更好方法是使用 member

    resources :users do
      member do
        post 'deposit'
      end
    end
    

    或者

    resources :users do
      post 'deposit', on: :member
    end
    

    这就是您只能使用user_id 而不能使用id 的原因

    您可以省略 :on 选项,这将创建相同的成员路由,但资源 id 值将在 params[:photo_id] 而不是 params[:id] 中可用。 http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

    【讨论】:

    • 哇,要改变这一点,我不得不将 user_deposit_path 的所有引用更改为 deposit_user_path。我几乎后悔改变它。
    • @Chloe,我不确定as 是否可以在这里工作。如果没有,应该非常快速地通过正则表达式搜索代码库并替换它。一些编辑器有文件夹搜索或“重构”工具,这使得它更快。
    【解决方案2】:

    奇数,

    {user_id: 1}
    

    工作。这是一条 rake 路线:

    user_deposit POST /users/:user_id/deposit(.:format)

    虽然这是另一个:

    edit_user GET /users/:id/edit(.:format)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      相关资源
      最近更新 更多