diff --git a/lib/webmock/rack_response.rb b/lib/webmock/rack_response.rb index 1122154a6..168828363 100644 --- a/lib/webmock/rack_response.rb +++ b/lib/webmock/rack_response.rb @@ -47,7 +47,9 @@ def build_rack_env(request) # Rack-specific variables env['rack.input'] = StringIO.new(body) env['rack.errors'] = $stderr - env['rack.version'] = Rack::VERSION + if !Rack.const_defined?(:RELEASE) || Rack::RELEASE < "3" + env['rack.version'] = Rack::VERSION + end env['rack.url_scheme'] = uri.scheme env['rack.run_once'] = true env['rack.session'] = session diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b32c9cc74..9c7bc842b 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -22,6 +22,8 @@ require 'support/my_rack_app' require 'support/failures' +Warning[:deprecated] = true if Warning.respond_to?(:[]=) + CURL_EXAMPLE_OUTPUT_PATH = File.expand_path('../support/example_curl_output.txt', __FILE__) RSpec.configure do |config| diff --git a/spec/support/my_rack_app.rb b/spec/support/my_rack_app.rb index fbec3fb8d..8380a00d7 100644 --- a/spec/support/my_rack_app.rb +++ b/spec/support/my_rack_app.rb @@ -37,6 +37,8 @@ def self.call(env) when ['GET', '/error'] env['rack.errors'].puts('Error!') [500, {}, ['']] + when ['GET', '/env'] + [200, {}, [JSON.dump(env)]] else [404, {}, ['']] end diff --git a/spec/unit/rack_response_spec.rb b/spec/unit/rack_response_spec.rb index 9ae89019c..3a505ff17 100644 --- a/spec/unit/rack_response_spec.rb +++ b/spec/unit/rack_response_spec.rb @@ -69,6 +69,20 @@ expect(response.body).to include('Good to meet you, Олег!') end + it "should send or not a rack.version depending on the Rack version" do + request = WebMock::RequestSignature.new(:get, 'www.example.com/env') + response = @rack_response.evaluate(request) + + expect(response.status.first).to eq(200) + body = JSON.parse(response.body) + + if Gem.loaded_specs["rack"].version > Gem::Version.new("3.0.0") + expect(body).not_to include("rack.version") + else + expect(body).to include("rack.version") + end + end + describe 'rack error output' do before :each do @original_stderr = $stderr