【发布时间】:2011-01-26 22:44:48
【问题描述】:
我有使用 session 的 sinatra 应用程序,如何测试使用 session 的页面?
我使用 Rspec + sinatra
Tks
【问题讨论】:
-
我认为你应该使用 Rack::Test(或者像 Capybara 这样的东西)来测试会话感知代码
我有使用 session 的 sinatra 应用程序,如何测试使用 session 的页面?
我使用 Rspec + sinatra
Tks
【问题讨论】:
This page,显示是rspec 和sinatra 的测试会话的主要问题。
主要问题是无法从测试代码访问变量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
【讨论】:
与所有其他页面相同。
您需要澄清您的问题。测试会话有什么问题。如果问题是用户需要登录,那么您可以在规范文件中使用类似这样的内容:
before :each do
post "/login", {:username => "myuser", :password => "mypass"}
end
它会在每次测试前让您登录。
【讨论】:
我只能通过禁用测试环境的会话来使其工作。这篇博文有一个很好的例子:http://benprew.posterous.com/testing-sessions-with-sinatra