更新到Rails 3.2.6或Rspec 2.11.0时发生路由错误

时间:2012-07-13 08:35:38

标签: ruby-on-rails-3 rspec journey

升级到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)>'

开发模式下的应用程序运行良好。

2 个答案:

答案 0 :(得分:7)

Rspec 2.11.0和Rails 3.2.6都使用最新的Journey gem(1.0.4)。它存在一些问题,并且通过明确地将其锁定到先前版本,规范错误消失了。

gem 'journey', '1.0.3'

<强>更新

我最近使用Journey 1.0.4将Rails更新为3.2.11,所有规格都通过了。我的Rspec是2.11.0 因此,不再需要下载旅程,只需更新Rails。

答案 1 :(得分:2)

在功能测试中环境似乎比在生产或开发中更严格。

在后两者中,它无法预先“知道”参数名称,因为它们是通过查看相应/匹配的路径定义来确定的。

在测试中,一个提供参数名称​​显式。这使得环境更加挑剔。

由于这种行为偏离了尽可能接近测试env匹配prod-env的原则,我认为这是一个错误并相应地提出了一个问题(https://github.com/rails/journey/issues/59)。

为了解决问题目前,请确保您的参数名称与您的路线完全匹配。

我建议添加相应的路线,直到就提交的问题确定结果。这样,如果它已经成为一个错误并且已经解决了,你只需要再次删除路径 - 而不是在控制器级别上调整你的生产逻辑(这已经完美地运行)。