升级到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)>'
开发模式下的应用程序运行良好。
答案 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)。
为了解决问题目前,请确保您的参数名称与您的路线完全匹配。
我建议添加相应的路线,直到就提交的问题确定结果。这样,如果它已经成为一个错误并且已经解决了,你只需要再次删除路径 - 而不是在控制器级别上调整你的生产逻辑(这已经完美地运行)。