Class: KnapsackPro::BaseAllocatorBuilder
- Inherits:
-
Object
- Object
- KnapsackPro::BaseAllocatorBuilder
- Defined in:
- lib/knapsack_pro/base_allocator_builder.rb
Direct Known Subclasses
Constant Summary collapse
- TEST_RUNNER_MAP =
{ KnapsackPro::Adapters::RSpecAdapter => 'rspec', KnapsackPro::Adapters::CucumberAdapter => 'cucumber', KnapsackPro::Adapters::MinitestAdapter => 'minitest', KnapsackPro::Adapters::SpinachAdapter => 'spinach', KnapsackPro::Adapters::TestUnitAdapter => 'test-unit', }
Instance Method Summary collapse
- #allocator ⇒ Object
-
#fallback_mode_test_files ⇒ Object
in fallback mode we always want to run the whole test files (not split by test cases) to guarantee that each test will be executed at least once across parallel CI nodes.
-
#fast_and_slow_test_files_to_run ⇒ Object
detect test files present on the disk that should be run this may include some fast test files + slow test files split by test cases.
-
#initialize(adapter_class) ⇒ BaseAllocatorBuilder
constructor
A new instance of BaseAllocatorBuilder.
- #test_dir ⇒ Object
Constructor Details
#initialize(adapter_class) ⇒ BaseAllocatorBuilder
Returns a new instance of BaseAllocatorBuilder.
13 14 15 16 |
# File 'lib/knapsack_pro/base_allocator_builder.rb', line 13 def initialize(adapter_class) @adapter_class = adapter_class ENV['KNAPSACK_PRO_TEST_RUNNER'] = TEST_RUNNER_MAP[adapter_class] end |
Instance Method Details
#allocator ⇒ Object
18 19 20 |
# File 'lib/knapsack_pro/base_allocator_builder.rb', line 18 def allocator raise NotImplementedError end |
#fallback_mode_test_files ⇒ Object
in fallback mode we always want to run the whole test files (not split by test cases) to guarantee that each test will be executed at least once across parallel CI nodes
29 30 31 |
# File 'lib/knapsack_pro/base_allocator_builder.rb', line 29 def fallback_mode_test_files all_test_files_to_run end |
#fast_and_slow_test_files_to_run ⇒ Object
detect test files present on the disk that should be run this may include some fast test files + slow test files split by test cases
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/knapsack_pro/base_allocator_builder.rb', line 35 def fast_and_slow_test_files_to_run test_files_to_run = all_test_files_to_run if adapter_class == KnapsackPro::Adapters::RSpecAdapter && KnapsackPro::Config::Env.rspec_split_by_test_examples? require 'rspec/core/version' unless Gem::Version.new(::RSpec::Core::Version::STRING) >= Gem::Version.new('3.3.0') raise "RSpec >= 3.3.0 is required to split test files by test examples. Learn more: #{KnapsackPro::Urls::SPLIT_BY_TEST_EXAMPLES}" end slow_test_files = get_slow_test_files KnapsackPro.logger.info("Generating RSpec test examples JSON report for slow test files to prepare it to be split by test examples (by individual 'it's. Thanks to that a single slow test file can be split across parallel CI nodes). Analyzing #{slow_test_files.size} slow test files.") # generate RSpec JSON report in separate process to not pollute RSpec state cmd = [ 'RACK_ENV=test', 'RAILS_ENV=test', KnapsackPro::Config::Env.rspec_test_example_detector_prefix, 'rake knapsack_pro:rspec_test_example_detector', ].join(' ') unless Kernel.system(cmd) raise "Could not generate JSON report for RSpec. Rake task failed when running #{cmd}" end # read JSON report detector = KnapsackPro::TestCaseDetectors::RSpecTestExampleDetector.new test_file_example_paths = detector.test_file_example_paths KnapsackPro::TestFilesWithTestCasesComposer.call(test_files_to_run, slow_test_files, test_file_example_paths) else test_files_to_run end end |
#test_dir ⇒ Object
22 23 24 |
# File 'lib/knapsack_pro/base_allocator_builder.rb', line 22 def test_dir KnapsackPro::Config::Env.test_dir || TestFilePattern.test_dir(adapter_class) end |