【问题标题】:How to test a custom route [ActionController::RoutingError:]如何测试自定义路由 [ActionController::RoutingError:]
【发布时间】:2014-07-03 18:52:19
【问题描述】:

测试输出:

Failures:

  1) AccountsController account signs up  
     Failure/Error: post :create, account_id: account.id
     ActionController::RoutingError:
       No route matches {:account_id=>"1", :controller=>"accounts", :action=>"create"}
     # ./spec/controllers/accounts_controller_spec.rb:24:in `block (4 levels) in <top (required)>'

routes.rb:

post 'sign_up', to: 'accounts#create'

规格:

RSpec.describe AccountsController, type: :controller do
...
it '' do
  post :create, account_id: account.id
  ...
end

我有一个指向我的 create 方法的自定义路由。我不想关心路线。我有一个有效的路线测试。现在我想测试create方法中的逻辑。

如何使用自定义路由测试create 方法?

我尝试过post 'my_custom_route',但没有成功。

导轨:3.2

Rspec:3

编辑:我只是以account.id 为例。在我的实际代码中,它不是真正的参数。

【问题讨论】:

    标签: ruby-on-rails testing rspec controller


    【解决方案1】:

    您应该使用:id,而不是:account_id

    post :create, id: account.id
    

    【讨论】:

      【解决方案2】:

      如何使用自定义路由测试 create 方法?

      你不能,至少在控制器规范中不能。

      控制器的单元测试旨在测试动作的主体,而不是路由。因此,您始终需要指定操作——在这种情况下,调度程序不会为您解析路由。

      您可以编写routing spec 来验证自定义路由是否按预期工作。或者您可以编写一个feature spec 来访问所需的 URL。

      【讨论】:

      • 我认为我们意见一致。我想测试#create 操作。我并不真正关心自定义路由(我根本不想关心 routes.rb 文件)。知道为什么我的post :create 不起作用吗?
      • No route matches 一般表示您已正确指定参数。 rake routes 说什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 2016-08-25
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多