使用session sinatra进行Rspec测试

3
我有一个使用session的sinatra应用程序,如何测试使用session的页面?
我使用Rspec + sinatra。

我认为你应该使用Rack :: Test(或类似于Capybara的东西)来测试会话感知代码。 - froderik
3个回答

1

这个页面展示了使用rspecsinatra进行测试会话的主要问题。

主要问题在于测试代码无法访问变量session。为了解决这个问题,建议(我也确认)在spec/spec_helper.rb中添加以下行:

def session
  last_request.env['rack.session']
end

它将使测试代码中最后一个请求的模拟会话对象可访问。
这是我的控制器代码,读取一个名为“code”的参数,并将其值存储在“session”中:
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

0

和其他页面一样。

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

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

这将在每个测试之前登录您的账户。


0

互联网档案馆链接: https://web.archive.org/web/20130418214800/http://benprew.posterous.com/testing-sessions-with-sinatra - ErikAGriffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接