This release is inspired by ideas discussed and implemented in this PR to Discourse. Specials thanks to @danielwaterworth and @SamSaffron.
tl;dr before_all
hooks, let_it_be
aliases, better Fabrication support.
before_all
- Added global callbacks to
before_all
.
Now you can execute additional code before and after every before_all
transaction begins and rollbacks:
TestProf::BeforeAll.configure do |config|
config.before(:begin) do
# do something before transaction opens
end
config.after(:rollback) do
# do something after transaction closes
end
end
let_it_be
- Added ability to use
let_it_be
aliases with predefined options.
TestProf::LetItBe.configure do |config|
config.alias_to :let_it_be_with_refind, refind: true
end
Then use it in your tests:
describe "smth" do
let_it_be_with_refind(:foo) { Foo.create }
# refind can still be overridden
let_it_be_with_refind(:bar, refind: false) { Bar.create }
end
FactoryProf
- Added timings to FactoryProf report.
[TEST PROF INFO] Factories usage
Total: 15285
Total top-level: 10286
Total time: 299.5937s
Total uniq factories: 119
total top-level total time top-level time name
6091 2715 115.7671s 50.2517s user
2142 2098 93.3152s 92.1915s post
FactoryDoctor
-
Added Fabrication support.
-
Added threshold and instrumentation event customization.
NOTE: default threshold is 0.01s (i.e. if the DB time is less for the example, we consider it "good").
$ FDOC=1 FDOC_EVENT="sql.rom" FDOC_THRESHOLD=0.1 rspec
EventProf
- Added
guard
andtop_level
options toEventProf::Monitor
.
For example:
TestProf::EventProf.monitor(
Sidekiq::Client,
"sidekiq.inline",
:raw_push,
# top_level: true means that we do not trigger events when the method is
# called recursively within itself
top_level: true,
# only trigger the event when guard returns `true`
guard: ->(*) { Sidekiq::Testing.inline? }
)
- Added Fabrication support for
factory.create
event.