在我的routes.rb
中,我有以下内容:
get 'home/index'
root :to => 'home#index'
如果我运行rake routes | grep home
,你看到
home_index GET /home/index(.:format) {:action=>"index", :controller=>"home"}
root /(.:format) {:action=>"index", :controller=>"home"}
因此,在我的application.html.haml
中,我有一个链接到root_path
,它很好地转换为
{:controller => "home", :action => :index}
但是在我运行的每个规范中,我得到错误:
No route matches {:controller=>"home"}
如果我在开发中运行应用程序,一切都呈现没有任何问题,可以正确点击。
有谁知道我做错了什么吗?我应该补充说,rails应用程序是在过程中从rails 2.3.11迁移到rails 3。我一定是忽略了什么,但我看不出是什么。
[EDIT: more findings]
我一直在尝试更多的东西。测试在Rubymine中运行得很好,或者如果我使用命令行并键入
rspec spec/controllers/users_controller/*.spec.rb
但是如果我使用
它们就不起作用了rake spec
有什么区别?我已经删除了lib/tasks/rspec.rake
文件(这是为rspec1生成的),我可以看到执行了正确的命令:
bundle exec rspec
所以我有点不知所措。
[EDIT: more testing]
运行时rspec spec/controller/**/*_spec.rb
运行
时,我的测试失败rspec spec/controller/accounts_controller/*_spec.rb
在我的文件顶部,我有以下内容:
describe AccountsController do
我显式地添加了类型:
describe AccountsController, :type => :controller do
但是没有效果。
有人有什么建议吗?
尝试将这一行添加到你的路由
resources :home, :controller => :home
我想你可能需要更具体一些:
get 'home/index' => 'home#index'
我找到了!这花了我一段时间,最后我修改了日志文件,看看发生了什么不同。
显然我有一个spec文件,我们试图测试一个基类。在该规范中,我们定义了一个派生的新控制器从那个基类中,使用一个虚拟索引方法。
我们还需要路由,因此在该规范中可以找到以下代码:
ActionController::Routing::Routes.draw do |map|
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
end
这个规范总是先运行。我猜这有效地清除了整个路由配置。
不确定这个变化是由rails3还是rspec2引起的,无论如何,我的大多数测试现在都在工作,只需要修复这个现在测试。