Ruby on Rails教程,第11章,练习7 - 打破我的rspec测试

时间:2011-01-30 16:17:42

标签: ruby-on-rails-3 rspec nested-routes

我正在研究Michael Hartl关于Rails的优秀教程,但是我在第11章练习7时遇到了麻烦。

本练习是:

  

添加嵌套路线   / users / 1 / microposts显示全部   用户1的微博。(你也会   必须添加一个Microposts控制器   索引动作和相应的视图。)

我已成功完成此操作,方法是将我的routes.rb文件更改为:

resources :users do
  resources :microposts, :only => [:create, :destroy]
end

我能够从浏览器成功呼叫/ users / 1 / microposts。但是,microposts_controller_spec.rb中的大多数测试现在都被破坏了。运行自动测试时收到“无路由匹配”错误。例如,第一个测试,简单地说:

it "should deny access to 'create'" do
  post :create
  response.should redirect_to(signin_path)
end

现在产生以下错误:

  

1)MicropostsController访问   控制应该拒绝访问'创建'        失败/错误:发布:创建        没有路线匹配{:controller =>“microposts”,   :动作=> “中创建”}

当我查看rake routes

,我找到了这个条目:

user_microposts POST   /users/:user_id/microposts(.:format)     {:action=>"create", :controller=>"microposts"}

表明路线确实存在。

有没有其他人在完成本教程时遇到此问题?一旦引入嵌套路由,是否需要在spec文件中进行更改? Rspec是否适用于嵌套路由?

感谢

1 个答案:

答案 0 :(得分:2)

因为这是一个嵌套路线,您需要通过user_id通过:

some_user = way_of_creating_a_user_goes_here
post :create, :user_id => some_user.id

RSpec将尝试在没有此参数的情况下转到/microposts路线。