7

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

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

4

2 回答 2

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。

于 2012-07-13T08:35:39.743 回答
2

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

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

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

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

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

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

于 2013-02-08T18:02:25.410 回答