Code Monkey home page Code Monkey logo

Comments (3)

arielvalentin avatar arielvalentin commented on July 17, 2024

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.

jeremyevans avatar jeremyevans commented on July 17, 2024

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.

arielvalentin avatar arielvalentin commented on July 17, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.