Module: ActiveSupport::Testing::ConstantStubbing
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Included In:
::ActionCable::Channel::TestCase ,
::ActionCable::Connection::TestCase ,
::ActionCable::TestCase ,
::ActionController::TestCase ,
::ActionDispatch::IntegrationTest ,
::ActionDispatch::SystemTestCase ,
::ActionMailbox::TestCase ,
::ActionMailer::TestCase ,
::ActionView::TestCase ,
::ActiveJob::TestCase ,
::ActiveSupport::TestCase ,
::Rails::Generators::TestCase
| |
Defined in: | activesupport/lib/active_support/testing/constant_stubbing.rb |
Instance Method Summary
-
#stub_const(mod, constant, new_value)
Changes the value of a constant for the duration of a block.
Instance Method Details
#stub_const(mod, constant, new_value)
Changes the value of a constant for the duration of a block. Example:
# World::List::Import::LARGE_IMPORT_THRESHOLD = 5000
stub_const(World::List::Import, :LARGE_IMPORT_THRESHOLD, 1) do
assert_equal 1, World::List::Import::LARGE_IMPORT_THRESHOLD
end
assert_equal 5000, World::List::Import::LARGE_IMPORT_THRESHOLD
Using this method rather than forcing World::List::Import::LARGE_IMPORT_THRESHOLD = 5000
prevents warnings from being thrown, and ensures that the old value is returned after the test has completed.
Note: Stubbing a const will stub it across all threads. So if you have concurrent threads (like separate test suites running in parallel) that all depend on the same constant, it’s possible divergent stubbing will trample on each other.
# File 'activesupport/lib/active_support/testing/constant_stubbing.rb', line 21
def stub_const(mod, constant, new_value) old_value = mod.const_get(constant, false) mod.send(:remove_const, constant) mod.const_set(constant, new_value) yield ensure mod.send(:remove_const, constant) mod.const_set(constant, old_value) end