Comments (3)
For comparison with Rack 2.2.1 and Rack-Test 2.1.0
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem 'minitest'
gem 'rack', '2.2.1'
gem 'rack-test', '2.1.0'
end
require 'minitest/autorun'
require 'rack/test'
class MyEventHandler
include ::Rack::Events::Abstract
MyError = Class.new(StandardError)
def on_start(_, _)
$stderr.puts __method__
end
def on_send(_, _)
$stderr.puts __method__
end
def on_commit(_, _)
$stderr.puts __method__
end
def on_finish(_, _)
raise MyError, 'unexpected'
end
def on_error(_, _, _)
$stderr.puts __method__
end
end
class BufferedTest < MiniTest::Test
include Rack::Test::Methods
def app
Rack::Builder.new.tap do |builder|
builder.use Rack::Events, [MyEventHandler.new]
builder.run ->(_env) { [200, { 'content-type' => 'text/plain' }, Rack::BodyProxy.new('All responses are OK') { puts 'Hello world' }] }
end
end
def test_root
assert_raises MyEventHandler::MyError do
get '/'
end
end
end
vibora ~/github/rack-test-failure(:|β) %
π€ ruby test.rb
Run options: --seed 43962
# Running:
on_start
on_commit
Hello world
.
Finished in 0.005103s, 195.9632 runs/s, 195.9632 assertions/s.
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
from rack-test.
It helps if you pass Rack::BodyProxy
a valid rack body :). Change to Rack::BodyProxy.new(['All responses are OK'])
and the test works.
As to why the behavior is skipped for the invalid body, because it is a plain string (in a wrapper that still responds to to_str
), Rack::Response
treats it as a plain string, and implicitly wraps it in its own array, so the on_finish parts are never called. Potentially, you can consider that a bug in rack, but as you can only trigger it by providing an invalid rack response, it is debatable whether it is a bug or not. However, it's definitely not a bug in rack-test, so I'm closing this.
from rack-test.
Thanks @jeremyevans!!! I should have been more diligent in verifying my code was correct so I appreciate you taking the time to review this.
ππΌ
from rack-test.
Related Issues (20)
- Encoding error with binary files HOT 13
- uploaded_file.rb#append_to: incompatible character encodings: UTF-8 and ASCII-8BIT HOT 3
- clarify that minitest is used for testing HOT 1
- utils.rb#build_primitive_part: incompatible character encodings: UTF-8 and ASCII-8BIT HOT 4
- Π‘an`t pass cookies HOT 1
- Setting original_filename when the content is not StringIO HOT 4
- build_primitive_part: undefined method `b' while testing docx HOT 4
- ActiveSupport::MessageVerifier::InvalidSignature error while uploading file in RSpec Tests HOT 2
- Rack::Test::UploadedFile#test_0007_finalizes on garbage collection fails on sparc HOT 3
- Resolving dependencies for published CVE's HOT 1
- Cannot set CONTENT_TYPE at Rack::MockRequest.env_for HOT 1
- Request#[] is deprecated and will be removed in a future version of Rack. Please use request.params[] instead HOT 2
- something amiss with release tags HOT 3
- Preferred way to set :domain option on cookie jar while setting a cookie using []=? HOT 2
- Is `Rack::Test::UploadedFile` supposed to be used with StringIO instead of real files? HOT 1
- Accessing Tempfile after GC of UploadedFile will cause IOError HOT 2
- Vulnerability scan shows rack-test is bringing in a vulnerable version of rack HOT 4
- Request body received as empty string in POST request (sinatra 4, rack 3) HOT 4
- no _dump_data is defined for class StringIO when running tests HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. πππ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rack-test.