Module: TestProf::MinitestSample
- Defined in:
- lib/test_prof/recipes/minitest/sample.rb
Overview
Add ability to run only a specified number of example groups (randomly selected)
Constant Summary collapse
- CORE_RUNNABLES =
Do not add these classes to resulted sample
[ Minitest::Test, Minitest::Unit::TestCase, Minitest::Spec ].freeze
Class Method Summary collapse
Instance Method Summary collapse
-
#run ⇒ Object
Overrides Minitest.run.
Class Method Details
.sample_examples(sample_size) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/test_prof/recipes/minitest/sample.rb', line 26 def sample_examples(sample_size) all_examples = suites.flat_map do |runnable| runnable.runnable_methods.map { |method| [runnable, method] } end sample = all_examples.sample(sample_size) # Filter examples by overriding #runnable_methods for all suites suites.each do |runnable| runnable.define_singleton_method(:runnable_methods) do super() & sample.select { |ex| ex.first.equal?(runnable) }.map(&:last) end end end |
.sample_groups(sample_size) ⇒ Object
20 21 22 23 24 |
# File 'lib/test_prof/recipes/minitest/sample.rb', line 20 def sample_groups(sample_size) saved_suites = suites Minitest::Runnable.reset saved_suites.sample(sample_size).each { |r| Minitest::Runnable.runnables << r } end |
.suites ⇒ Object
14 15 16 17 18 |
# File 'lib/test_prof/recipes/minitest/sample.rb', line 14 def suites # Make sure that sample contains only _real_ suites Minitest::Runnable.runnables .reject { |suite| CORE_RUNNABLES.include?(suite) } end |
Instance Method Details
#run ⇒ Object
Overrides Minitest.run
41 42 43 44 45 46 47 48 |
# File 'lib/test_prof/recipes/minitest/sample.rb', line 41 def run(*) if ENV['SAMPLE'] MinitestSample.sample_examples(ENV['SAMPLE'].to_i) elsif ENV['SAMPLE_GROUPS'] MinitestSample.sample_groups(ENV['SAMPLE_GROUPS'].to_i) end super end |