Ruby on rails - rails3和rspec2:没有路由匹配错误(当它在应用程序中工作时)



在我的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引起的,无论如何,我的大多数测试现在都在工作,只需要修复这个现在测试。

相关内容

  • 没有找到相关文章

最新更新