ruby-on-rails – Rspec 2.7访问控制器会话在规格要求之前

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rspec 2.7访问控制器会话在规格要求之前前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Rspec来测试我的控制器,在向路径发出请求之前,我似乎无法设置当前控制器的会话变量.
例如这样做:
  1. describe "GET /controller/path" do
  2. it "if not matching CRSF should display message" do
  3. get controller_path
  4.  
  5. request.session[:state] = "12334"
  6. end
  7. end

这不工作(我得到一个错误,说会话不是一个Nil类的方法):

  1. describe "GET /controller/path" do
  2. it "if not matching CRSF should display message" do
  3. request.session[:state] = "12334"
  4. get controller_path
  5. end
  6. end

有任何想法吗?

解决方法

使用新版本的RSpec,这样做相当不错,看看:
  1. describe SessionController do
  2. # routes are mapped as:
  3. # match 'login' => 'session#create'
  4. # get 'logout' => 'session#destroy'
  5.  
  6. describe "#create" do
  7. context "with valid credentials" do
  8. let :credentials do
  9. { :email => 'example@gmail.com',:password => 'secret' }
  10. end
  11.  
  12. let :user do
  13. FactoryGirl.create(:user,credentials)
  14. end
  15.  
  16. before :each do
  17. post '/login',credentials
  18. end
  19.  
  20. it "creates a user session" do
  21. session[:user_id].should == user.id
  22. end
  23. end
  24.  
  25. # ...
  26. end
  27.  
  28. describe "#destroy" do
  29. context "when user logged in" do
  30. before :each do
  31. get "/logout",{},{ :user_id => 123 } # the first hash is params,second is session
  32. end
  33.  
  34. it "destroys user session" do
  35. session[:user_id].should be_nil
  36. end
  37.  
  38. # ...
  39. end
  40. end
  41. end

你也可以使用简单的request.session [:user_id] = 123里面的(每个)块,但上面看起来更好.

猜你在找的Ruby相关文章