Skip to content

Commit fcb9354

Browse files
committed
fix: Unexpected default rack.session
Some rack applications fail when the `rack.session` is already initialized, but with an unexpected value. For example, in a Rails API-only application, unexpected behavior is triggered when a `rack.session` is present. This commit changes webmock, not to set a `rack.session` at all, similar to how web servers do not set a session. The application or a middleware sets them up if needed. Fixes #985
1 parent 50bb349 commit fcb9354

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

lib/webmock/rack_response.rb

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,22 +52,12 @@ def build_rack_env(request)
5252
end
5353
env['rack.url_scheme'] = uri.scheme
5454
env['rack.run_once'] = true
55-
env['rack.session'] = session
56-
env['rack.session.options'] = session_options
5755

5856
headers.each do |k, v|
5957
env["HTTP_#{k.tr('-','_').upcase}"] = v
6058
end
6159

6260
env
6361
end
64-
65-
def session
66-
@session ||= {}
67-
end
68-
69-
def session_options
70-
@session_options ||= {}
71-
end
7262
end
7363
end

spec/unit/rack_response_spec.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,17 @@
8282
end
8383
end
8484

85+
it "shouldn't set a rack.session" do
86+
request = WebMock::RequestSignature.new(:get, 'www.example.com/env')
87+
response = @rack_response.evaluate(request)
88+
89+
expect(response.status.first).to eq(200)
90+
body = JSON.parse(response.body)
91+
92+
expect(body).not_to include("rack.session")
93+
expect(body).not_to include("rack.session.options")
94+
end
95+
8596
describe 'rack error output' do
8697
before :each do
8798
@original_stderr = $stderr

0 commit comments

Comments
 (0)