使用会话sinatra使用Rspec进行测试

使用会话sinatra使用Rspec进行测试,rspec,sinatra,Rspec,Sinatra,我有使用session的sinatra应用程序,如何测试使用session的页面 I使用Rspec+sinatra Tks与所有其他页面一样 你需要澄清你的问题。测试会话有什么问题。如果问题是用户需要登录,则可以在spec文件中使用类似以下内容: before :each do post "/login", {:username => "myuser", :password => "mypass"} end 它将在每次测试之前让您登录。我只能通过禁用测试环境的会话来让它工作。这

我有使用session的sinatra应用程序,如何测试使用session的页面

I使用Rspec+sinatra


Tks与所有其他页面一样

你需要澄清你的问题。测试会话有什么问题。如果问题是用户需要登录,则可以在spec文件中使用类似以下内容:

before :each do
  post "/login", {:username => "myuser", :password => "mypass"}
end

它将在每次测试之前让您登录。

我只能通过禁用测试环境的会话来让它工作。这篇博文有一个很好的例子:

,展示了使用
rspec
sinatra
测试会话的主要问题

主要问题是无法从测试代码访问变量
会话
。为了解决这个问题,它建议(我也确认)在
spec/spec\u helper.rb
添加捕鸟线:

def session
  last_request.env['rack.session']
end
它将使模拟会话对象可以从测试代码的最后一个请求中访问

这是我的控制器代码,它读取一个
代码
参数,并将其值存储在
会话

post '/step2callback' do
  session['code'] = params['code']
end
下面是测试代码:

context "making an authentication" do
  before do
    post "/step2callback", code: "code_sample"
  end
  it "reads the param code and saves it at session" do
    expect(session['code']).to eq("code_sample")
  end  
end

我认为您应该使用Rack::Test(或类似Capybara的其他工具)来测试会话感知代码Internet存档链接: