【问题标题】:Rspec 2.7 access controller session in spec before making requestRspec 2.7 在发出请求之前访问规范中的控制器会话
【发布时间】:2011-11-07 23:04:38
【问题描述】:

我正在使用 Rspec 测试我的控制器,但在向路径发出请求之前,我似乎无法设置当前被测控制器的会话变量。 例如这有效:

  describe "GET /controller/path" do
    it "if not matching CRSF should display message" do
      get controller_path

      request.session[:state] = "12334"
    end
  end

这不起作用(我收到一条错误消息,说 session 不是 Nil 类的方法):

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

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails testing rspec rspec2


    【解决方案1】:

    使用新版本的 RSpec 做得很好,看:

    describe SessionController do
      # routes are mapped as:
      # match 'login' => 'session#create'
      # get 'logout' => 'session#destroy'
    
      describe "#create" do
        context "with valid credentials" do
          let :credentials do
            { :email => 'example@gmail.com', :password => 'secret' }
          end
    
          let :user do
            FactoryGirl.create(:user, credentials)
          end
    
          before :each do
            post '/login', credentials
          end
    
          it "creates a user session" do
            session[:user_id].should == user.id
          end
        end
    
        # ...
      end
    
      describe "#destroy" do
        context "when user logged in" do
          before :each do
            get "/logout", {}, { :user_id => 123 } # the first hash is params, second is session
          end
    
          it "destroys user session" do
            session[:user_id].should be_nil
          end
    
          # ...
        end
      end
    end
    

    您也可以在before(:each) 块内简单地使用request.session[:user_id] = 123,但上面看起来更漂亮。

    【讨论】:

    • 它应该在 2016 年工作吗?)在此检查中出现错误,它“应该验证用户”确实期望(session[:user_id]).to eq(user.id) end
    【解决方案2】:

    试试这个:

    describe "GET /controller/path" do
        it "if not matching CRSF should display message" do
          session[:state] = "12334"
          get controller_path
        end
      end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多