【问题标题】:Rails 5 routing spec requires :path valueRails 5 路由规范需要:路径值
【发布时间】:2017-04-28 16:26:58
【问题描述】:

将 Rails 4.2.8 升级到 5.0 后,我的所有路由规范都失败并显示相同的错误消息:

1) UsersController routing routes to SHOW
     Failure/Error: expect(get: '/users/joe-smith').to route_to('users#show', id: 'joe-smith')

       The recognized options <{"path"=>"users/joe-smith", "controller"=>"users", "action"=>"show", "id"=>"joe-smith"}> did not match <{"id"=>"joe-smith", "controller"=>"users", "action"=>"show"}>, difference:.
       --- expected
       +++ actual
       @@ -1 +1 @@
       -{"id"=>"joe-smith", "controller"=>"users", "action"=>"show"}
       +{"path"=>"users/joe-smith", "controller"=>"users", "action"=>"show", "id"=>"joe-smith"}
     # ./spec/routing/users_controller_routing_spec.rb:10:in `block (3 levels) in <top (required)>'

Finished in 0.05154 seconds (files took 6.86 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/routing/users_controller_routing_spec.rb:9 # UsersController routing routes to SHOW

规格:

it 'routes to SHOW' do
  expect(get: '/users/joe-smith').to route_to('users#show', id: 'joe-smith')
end

有人知道为什么会这样吗?我没有在 Rails 5 CHANGELOG 中看到任何内容。

【问题讨论】:

  • 除了复制路径之外,还有什么优雅的解决方法?
  • 首先使用.to route_to 规范是毫无价值的。无论如何,您应该至少有一个功能或请求规范应该涵盖这一点。
  • 至于为什么 - 它实际上可能不是 Rails 中已发布的更改。这可能是 RSpec-Rails 中的回归。

标签: ruby-on-rails ruby testing rspec ruby-on-rails-5


【解决方案1】:

更好的解决方法是开始转向更多future proof method 的测试,以提供更多价值:

require 'rails_helper'
RSpec.describe "Users", type: :request do
  let(:user) { create(:user) }

  describe "GET /users/:id" do
    it "takes a username as the id param" do
       get user_path(user.user_name)
       expect(response).to be_successful
    end
  end
end

【讨论】:

  • 对于任何给定的应用程序和功能,您应该在什么级别上进行测试有点争议。有些人偏向于更快、更可靠的单元测试,而有些人(可能是@max?)偏向于提供更真实覆盖率的验收测试。这对于操作来说可能是正确的解决方案,但我不确定这对每个人来说都是一个很好的解决方案。
  • 添加一堆无用的低级规范,这些规范复制了您应该在集成规范中涵盖的内容并不会更快。
  • Rails 5 中的变化非常清楚地表明社区并不认为单元测试控制器是一种好的做法。它值得商榷——但我想说,到此为止,争论已经结束了。
猜你喜欢
  • 2018-08-09
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
相关资源
最近更新 更多