【问题标题】:Test with Rspec using session sinatra使用会话 sinatra 使用 Rspec 进行测试
【发布时间】:2011-01-26 22:44:48
【问题描述】:

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

我使用 Rspec + sinatra

Tks

【问题讨论】:

  • 我认为你应该使用 Rack::Test(或者像 Capybara 这样的东西)来测试会话感知代码

标签: rspec sinatra


【解决方案1】:

This page,显示是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

【讨论】:

    【解决方案2】:

    与所有其他页面相同。

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

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

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

    【讨论】:

      【解决方案3】:

      我只能通过禁用测试环境的会话来使其工作。这篇博文有一个很好的例子:http://benprew.posterous.com/testing-sessions-with-sinatra

      猜你喜欢
      • 2015-12-12
      • 1970-01-01
      • 2011-05-23
      • 2017-06-19
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      相关资源
      最近更新 更多