Class: KnapsackPro::Adapters::RSpecAdapter
Constant Summary
collapse
- TEST_DIR_PATTERN =
'spec/**{,/*/**}/*_spec.rb'
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from BaseAdapter
adapter_bind_method_called_file, bind, #bind, #bind_queue_mode, slow_test_file?, verify_bind_method_called
Class Method Details
.ensure_no_tag_option_when_rspec_split_by_test_examples_enabled!(cli_args) ⇒ Object
49
50
51
|
# File 'lib/knapsack_pro/adapters/rspec_adapter.rb', line 49
def self.has_format_option?(cli_args)
!!parsed_options(cli_args)&.[](:formatters)
end
|
.has_tag_option?(cli_args) ⇒ Boolean
45
46
47
|
# File 'lib/knapsack_pro/adapters/rspec_adapter.rb', line 45
def self.has_tag_option?(cli_args)
!!parsed_options(cli_args)&.[](:inclusion_filter)
end
|
.order_option(cli_args) ⇒ Object
53
54
55
|
# File 'lib/knapsack_pro/adapters/rspec_adapter.rb', line 53
def self.order_option(cli_args)
parsed_options(cli_args)&.[](:order)
end
|
.split_by_test_cases_enabled? ⇒ Boolean
8
9
10
11
12
13
14
15
16
17
|
# File 'lib/knapsack_pro/adapters/rspec_adapter.rb', line 8
def self.split_by_test_cases_enabled?
return false unless 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
true
end
|
.test_file_cases_for(slow_test_files) ⇒ Object
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# File 'lib/knapsack_pro/adapters/rspec_adapter.rb', line 19
def self.test_file_cases_for(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 test cases). Thanks to that, a single slow test file can be split across parallel CI nodes. Analyzing #{slow_test_files.size} slow test files.")
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
KnapsackPro::TestCaseDetectors::RSpecTestExampleDetector.new.test_file_example_paths
end
|
.test_path(example) ⇒ Object
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/knapsack_pro/adapters/rspec_adapter.rb', line 57
def self.test_path(example)
example_group = example.metadata[:example_group]
if defined?(::Turnip) && Gem::Version.new(::Turnip::VERSION) < Gem::Version.new('2.0.0')
unless example_group[:turnip]
until example_group[:parent_example_group].nil?
example_group = example_group[:parent_example_group]
end
end
else
until example_group[:parent_example_group].nil?
example_group = example_group[:parent_example_group]
end
end
example_group[:file_path]
end
|
Instance Method Details
#bind_before_queue_hook ⇒ Object
126
127
128
129
130
131
132
133
134
135
|
# File 'lib/knapsack_pro/adapters/rspec_adapter.rb', line 126
def bind_before_queue_hook
::RSpec.configure do |config|
config.before(:suite) do
unless ENV['KNAPSACK_PRO_BEFORE_QUEUE_HOOK_CALLED']
ENV['KNAPSACK_PRO_BEFORE_QUEUE_HOOK_CALLED'] = 'true'
KnapsackPro::Hooks::Queue.call_before_queue
end
end
end
end
|
#bind_save_report ⇒ Object
118
119
120
121
122
123
124
|
# File 'lib/knapsack_pro/adapters/rspec_adapter.rb', line 118
def bind_save_report
::RSpec.configure do |config|
config.after(:suite) do
KnapsackPro::Report.save
end
end
end
|
#bind_time_tracker ⇒ Object