Speed up and cleanup events helper spec
What does this MR do and why?
This MR attempts to cleanup and speed up spec/helpers/events_helper_spec.rb
:
- Use
let_it_be
- Use factory defaults (via test-prof)
- Resolve all pending RuboCop offenses
- Fix static localization definitions
- Avoid slow membership creations
- Run specs in random order
How to set up and validate locally
bin/rspec spec/helpers/events_helper_spec.rb
REVEAL_RUBOCOP_TODO=1 bundle exec rubocop spec/helpers/events_helper_spec.rb
Inspecting 1 file
.
1 file inspected, no offenses detected
RSpec Profiling
Here's the output from test-prof
when run with FPROF=1
. Note:
-
Total amount
of factories created went down from 200 to 98🚀 -
Total events
went down from 7112 to 2267 - Queries saved: 4845
Before
Finished in 40.02 seconds (files took 2.92 seconds to load)
55 examples, 0 failures
Randomized with seed 29629
[TEST PROF INFO] Time spent in factories: 00:28.538 (66.06% of total time)
[TEST PROF INFO] Factories usage
Total: 200
Total top-level: 68
Total time: 00:28.538 (out of 00:43.831)
Total uniq factories: 32
total top-level total time time per call top-level time name
44 0 6.0905s 0.1384s 0.0000s namespace
41 12 19.0680s 0.4651s 7.6107s project
31 4 3.4175s 0.1102s 0.3836s user
22 22 7.9500s 0.3614s 7.9500s event
8 0 0.1458s 0.0182s 0.0000s work_item_type
7 4 2.0389s 0.2913s 1.6549s issue
4 1 0.8553s 0.2138s 0.4196s wiki_page
4 4 2.0671s 0.5168s 2.0671s wiki_page_event
4 0 0.1495s 0.0374s 0.0000s wiki_page_meta
3 0 0.0004s 0.0001s 0.0000s wiki
3 2 2.5138s 0.8379s 2.1460s merge_request
3 3 1.3119s 0.4373s 1.3119s push_event
3 0 0.9839s 0.3280s 0.0000s project_empty_repo
2 2 0.0779s 0.0390s 0.0779s project_group_link
2 2 0.7688s 0.3844s 0.7688s note_on_commit
2 1 0.3818s 0.1909s 0.3511s note
2 2 0.0281s 0.0140s 0.0281s push_event_payload
1 1 0.0797s 0.0797s 0.0797s group
1 0 0.0064s 0.0064s 0.0000s namespace_settings
1 0 0.0049s 0.0049s 0.0000s namespace_ci_cd_settings
1 1 0.0004s 0.0004s 0.0004s project_wiki
1 1 0.6251s 0.6251s 0.6251s note_on_personal_snippet
1 0 0.4410s 0.4410s 0.0000s personal_snippet
1 0 0.1296s 0.1296s 0.0000s author
1 1 1.2257s 1.2257s 1.2257s note_on_issue
1 1 0.3371s 0.3371s 0.3371s note_on_project_snippet
1 0 0.0360s 0.0360s 0.0000s project_snippet
1 1 0.6833s 0.6833s 0.6833s note_on_merge_request
1 0 0.0306s 0.0306s 0.0000s design
1 1 0.4243s 0.4243s 0.4243s work_item
1 1 0.3813s 0.3813s 0.3813s milestone
1 1 0.0122s 0.0122s 0.0122s license
After
Finished in 13.8 seconds (files took 2.18 seconds to load)
55 examples, 0 failures
Randomized with seed 44504
[TEST PROF INFO] Time spent in factories: 00:06.175 (38.46% of total time)
[TEST PROF INFO] Factories usage
Total: 98
Total top-level: 54
Total time: 00:06.175 (out of 00:16.555)
Total uniq factories: 32
total top-level total time time per call top-level time name
18 18 0.2438s 0.0135s 0.2438s event
9 0 0.7086s 0.0787s 0.0000s namespace
8 0 0.0731s 0.0091s 0.0000s work_item_type
7 4 0.5320s 0.0760s 0.2028s issue
6 3 1.8899s 0.3150s 1.2553s project
4 4 0.2763s 0.0691s 0.2763s user
4 1 0.3251s 0.0813s 0.1187s wiki_page
4 4 0.7103s 0.1776s 0.7103s wiki_page_event
4 0 0.0582s 0.0146s 0.0000s wiki_page_meta
3 3 0.7018s 0.2339s 0.7018s push_event
3 0 0.6262s 0.2087s 0.0000s project_empty_repo
3 2 0.7229s 0.2410s 0.5541s merge_request
3 0 0.0053s 0.0018s 0.0000s wiki
2 2 0.0161s 0.0081s 0.0161s push_event_payload
2 1 1.1619s 0.5809s 1.1361s note
2 2 0.0826s 0.0413s 0.0826s note_on_commit
1 1 0.0609s 0.0609s 0.0609s group
1 0 0.0042s 0.0042s 0.0000s namespace_settings
1 0 0.0035s 0.0035s 0.0000s namespace_ci_cd_settings
1 1 0.0659s 0.0659s 0.0659s project_group_link
1 1 0.0759s 0.0759s 0.0759s note_on_project_snippet
1 0 0.0538s 0.0538s 0.0000s project_snippet
1 1 0.1023s 0.1023s 0.1023s note_on_personal_snippet
1 0 0.0837s 0.0837s 0.0000s personal_snippet
1 0 0.0591s 0.0591s 0.0000s author
1 1 0.0686s 0.0686s 0.0686s note_on_issue
1 1 0.1915s 0.1915s 0.1915s note_on_merge_request
1 0 0.0211s 0.0211s 0.0000s design
1 1 0.0053s 0.0053s 0.0053s project_wiki
1 1 0.0588s 0.0588s 0.0588s work_item
1 1 0.2421s 0.2421s 0.2421s milestone
1 1 0.0067s 0.0067s 0.0067s license
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
Edited by Peter Leitzen