更新到Rails 3.2.6或Rspec的2.11.0当路由错误(Routing error whe

2019-06-26 06:06发布

升级到Rails 3.2.6或Rspec的2.11.0后,我的规格开始出现类似下面的路由错误:

  4) UsersController GET activate activation code not exist 
     Failure/Error: subject{ get :activate }
     ActionController::RoutingError:
       No route matches {:controller=>"users", :action=>"activate"}

还有一个每个挂钩错误后

An error occurred in an after(:each) hook
  RSpec::Mocks::MockExpectationError: (#<EmailSubscriber[...]>).update_attributes({:enable=>true})
    expected: 1 time
    received: 0 times
  occurred at [...]/spec/controllers/users_controller_spec.rb:75:in `block (3 levels) in <top (required)>'

在开发模式下的应用仍然运行良好。

Answer 1:

无论Rspec的2.11.0和Rails 3.2.6采用了最新的宝石之旅(1.0.4)。 它有一些问题,并通过显式地将其锁定到以前版本的规格错误消失。

gem 'journey', '1.0.3'

UPDATE

我最近更新的Rails 3.2.11与1.0.4之旅,和所有规格过去了。 我Rspec的是2.11.0因此没有必要再downlock旅程,只需更新的Rails。



Answer 2:

看来,环境是功能测试更严格的比在生产或开发。

在后两种,它是无法预先“知道”的参数名称,因为它们是通过查看根据/匹配路由定义来确定。

在测试中 ,然而,一个提供参数名称明确 。 这使得环境更加挑剔。

由于这种行为从具有测试ENV尽可能地匹配PROD-ENV的原则漂走,我认为这是一个错误,并相应提交的问题( https://github.com/rails/journey/issues/59 )。

为了解决这个问题 ,现在,请确保您的参数名称完全符合您的路线。

我建议增加根据路线,直到结果是关于在提交问题决定。 这样一来,如果它consired错误并解决,你只需要再次删除路径 - 而不是与控制器级别的生产逻辑(这已经是完美工作)摆弄。



文章来源: Routing error when updating to Rails 3.2.6 or Rspec 2.11.0