Skip to content

Instantly share code, notes, and snippets.

@nalabjp
Created March 28, 2017 02:20
Show Gist options
  • Save nalabjp/2c00558e63af83201a749616108caaf7 to your computer and use it in GitHub Desktop.
Save nalabjp/2c00558e63af83201a749616108caaf7 to your computer and use it in GitHub Desktop.
rails_version = ENV['R4'] ? '4.2.8' : '5.0.2'
def bundle_install(version)
gemfile = "./Gemfile-#{version}"
ENV.update('BUNDLE_GEMFILE' => gemfile)
unless File.exists?(gemfile)
File.write(gemfile, <<~GEMFILE)
source 'http://rubygems.org'
gem 'rails', "#{version}"
GEMFILE
system 'bundle install --path=vendor/bundle'
end
end
bundle_install(rails_version)
require 'bundler/setup'
require 'action_controller/railtie'
class TestApp < Rails::Application
config.root = File.dirname(__FILE__)
config.session_store :cookie_store, key: 'cookie_store_key'
secrets.secret_token = 'secret_token'
secrets.secret_key_base = 'secret_key_base'
config.logger = Logger.new($stdout)
Rails.logger = config.logger
routes.draw do
get '/' => 'test#index'
end
end
class TestController < ActionController::Base
include Rails.application.routes.url_helpers
ActiveSupport::Deprecation.silence do
before_filter :test_exception
skip_filter :test_exception, if: :test_condition?
end
def test_condition?
false
end
def test_exception
raise
end
def index
render plain: 'Home'
end
end
require 'minitest/autorun'
require 'rack/test'
class BugTest < Minitest::Test
include Rack::Test::Methods
def test_returns_success
get '/'
assert last_response.server_error?
end
private
def app
Rails.application
end
end
@nalabjp
Copy link
Author

nalabjp commented Mar 28, 2017

Original snippet -> rails/rails#25916

@nalabjp
Copy link
Author

nalabjp commented Mar 28, 2017

Rails 5.0.2

$ ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin15]
$ ruby skip_action_callback_test.rb
Run options: --seed 1261

# Running:

I, [2017-03-28T11:24:09.675064 #18043]  INFO -- : Started GET "/" for 127.0.0.1 at 2017-03-28 11:24:09 +0900
F

Finished in 0.166445s, 6.0080 runs/s, 6.0080 assertions/s.

  1) Failure:
BugTest#test_returns_success [skip_action_callback_test.rb:64]:
Expected false to be truthy.

1 runs, 1 assertions, 1 failures, 0 errors, 0 skips

@nalabjp
Copy link
Author

nalabjp commented Mar 28, 2017

Rails 4.2.8

$ ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin15]
$ R4=1 ruby skip_action_callback_test.rb
Run options: --seed 62124

# Running:

D, [2017-03-28T11:25:25.274660 #21072] DEBUG -- :
D, [2017-03-28T11:25:25.274733 #21072] DEBUG -- :
I, [2017-03-28T11:25:25.275067 #21072]  INFO -- : Started GET "/" for 127.0.0.1 at 2017-03-28 11:25:25 +0900
F, [2017-03-28T11:25:25.279450 #21072] FATAL -- :
RuntimeError ():
  skip_action_callback_test.rb:48:in `test_exception'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:432:in `block in make_lambda'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:145:in `block in halting_and_conditional'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:504:in `block in call'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:504:in `each'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:504:in `call'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:92:in `__run_callbacks__'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:81:in `run_callbacks'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/abstract_controller/callbacks.rb:19:in `process_action'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_controller/metal/rescue.rb:29:in `process_action'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications.rb:164:in `block in instrument'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications.rb:164:in `instrument'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_controller/metal/instrumentation.rb:30:in `process_action'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/abstract_controller/base.rb:137:in `process'
  vendor/bundle/ruby/2.3.0/gems/actionview-4.2.8/lib/action_view/rendering.rb:30:in `process'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_controller/metal.rb:196:in `dispatch'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_controller/metal.rb:237:in `block in action'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/routing/route_set.rb:74:in `dispatch'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/routing/route_set.rb:43:in `serve'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/journey/router.rb:43:in `block in serve'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/journey/router.rb:30:in `each'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/journey/router.rb:30:in `serve'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/routing/route_set.rb:817:in `call'
  vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/etag.rb:24:in `call'
  vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/conditionalget.rb:25:in `call'
  vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/head.rb:13:in `call'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/params_parser.rb:27:in `call'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/flash.rb:260:in `call'
  vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/session/abstract/id.rb:225:in `context'
  vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/session/abstract/id.rb:220:in `call'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/cookies.rb:560:in `call'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/callbacks.rb:29:in `blockin call'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:88:in `__run_callbacks__'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:778:in `_run_call_callbacks'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:81:in `run_callbacks'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/callbacks.rb:27:in `call'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/reloader.rb:73:in `call'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/debug_exceptions.rb:17:in`call'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
  vendor/bundle/ruby/2.3.0/gems/railties-4.2.8/lib/rails/rack/logger.rb:38:in `call_app'
  vendor/bundle/ruby/2.3.0/gems/railties-4.2.8/lib/rails/rack/logger.rb:22:in `call'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/request_id.rb:21:in `call'
  vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/methodoverride.rb:22:in `call'
  vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/runtime.rb:18:in `call'
  vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/lock.rb:17:in `call'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/static.rb:120:in `call'
  vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/sendfile.rb:113:in `call'
  vendor/bundle/ruby/2.3.0/gems/railties-4.2.8/lib/rails/engine.rb:518:in `call'
  vendor/bundle/ruby/2.3.0/gems/railties-4.2.8/lib/rails/application.rb:165:in `call'
  vendor/bundle/ruby/2.3.0/gems/rack-test-0.6.3/lib/rack/mock_session.rb:30:in `request'
  vendor/bundle/ruby/2.3.0/gems/rack-test-0.6.3/lib/rack/test.rb:244:in `process_request'
  vendor/bundle/ruby/2.3.0/gems/rack-test-0.6.3/lib/rack/test.rb:58:in `get'
  /Users/kimura/.rbenv/versions/2.3.3/lib/ruby/2.3.0/forwardable.rb:189:in `get'
  skip_action_callback_test.rb:63:in `test_returns_success'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest/test.rb:105:in `block (3 levels) in run'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest/test.rb:202:in `capture_exceptions'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest/test.rb:102:in `block (2 levels) in run'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest/test.rb:253:in `time_it'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest/test.rb:101:in `block in run'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:349:in `on_signal'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest/test.rb:273:in `with_info_handler'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest/test.rb:100:in `run'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:822:in `run_one_method'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:323:in `run_one_method'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:310:in `block (2 levels) in run'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:309:in `each'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:309:in `block in run'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:349:in `on_signal'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:336:in `with_info_handler'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:308:in `run'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:158:in `block in __run'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:158:in `map'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:158:in `__run'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:135:in `run'
  vendor/bundle/ruby/2.3.0/gems/minitest-5.10.1/lib/minitest.rb:62:in `block in autorun'


.

Finished in 0.047819s, 20.9122 runs/s, 20.9122 assertions/s.

1 runs, 1 assertions, 0 failures, 0 errors, 0 skips

@nalabjp
Copy link
Author

nalabjp commented Mar 28, 2017

If we use skip_action_callback, we will get the same result.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment