【问题标题】:Routing error when updating to Rails 3.2.6 or Rspec 2.11.0更新到 Rails 3.2.6 或 Rspec 2.11.0 时出现路由错误
【发布时间】:2012-07-13 08:35:37
【问题描述】:

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

处于开发模式的应用程序仍然可以正常运行。

【问题讨论】:

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


    【解决方案1】:

    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。

    【讨论】:

    • 你是怎么找到它的?我按照您的回答修复了 rails 测试中的错误,但基本上错误消息没有说明任何内容。
    • 嗯,这是一个路由错误,我的测试太基础了,肯定是 gem 更新之一,我发现旅程是两个更新的共同依赖
    • +1 为我工作——将Rails 3.2.6 应用降级为明确使用1.0.3 而不是1.0.4
    • @te_chris 不,我的测试尽可能简单。这可能是问题github.com/rails/journey/issues/42
    • 这不适用于 Rails 2.3.8,因为它依赖于 Journey 1.0.4 或更高版本。
    【解决方案2】:

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

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

    在测试中,然而,显式地提供参数名称。这使得环境更加挑剔。

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

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

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

    【讨论】:

    • 也遇到了这个问题,并从 rspec-rails repo 链接到它
    猜你喜欢
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多