Я пытаюсь проверить распределение памяти. И выберите для этого rspec-benchmark
драгоценный камень. Но нашел странное поведение, которое я не понимаю. Чтобы воспроизвести его, мы можем написать spe c следующим образом:
require 'rails_helper'
describe ApplicationsManagement::Export do
let(:applications_collection) { create_list(:application, 1 ) }
describe '#call' do
it 'comsumpts not more 1 MB' do
i = 0
expect { applications_collection.each { |app| puts i += 1 } }.to perform_allocation(1_048_576).bytes
end
end
end
Когда мы запускаем spe c, нам нужно подождать несколько минут !!
ApplicationsManagement::Export
#call
1
comsumpts not more 1 MB (FAILED - 1)
Failures:
1) ApplicationsManagement::Export#call comsumpts not more 1 MB
Failure/Error: expect { applications_collection.each { |app| puts i += 1 } }.to perform_allocation(1_048_576).bytes
expected block to perform allocation of 1048576 bytes, but allocated 10694166 bytes
# ./spec/services/applications_management/export_spec.rb:16:in `block (3 levels) in <top (required)>'
# ./spec/rails_helper.rb:55:in `block (3 levels) in <top (required)>'
# ./spec/rails_helper.rb:54:in `block (2 levels) in <top (required)>'
Finished in 4 minutes 8.5 seconds (files took 21.99 seconds to load)
1 example, 1 failure
Если честно, это был первый раз, когда я вижу результат, потому что я не ждал никогда. В любом случае, это слишком долгое время только для одного приложения, создающего и выделяющего 1 Мб памяти. Что я делаю не так, почему этот spe c работает так долго?
spec / rails_helper.rb
require 'rspec-benchmark'
RSpec.configure do |config|
config.include RSpec::Benchmark::Matchers
...
PS:
rails 4.2.9
rspec (3.5.0)
rspec-core (~> 3.5.0)
rspec-expectations (~> 3.5.0)
rspec-mocks (~> 3.5.0)
rspec-benchmark (0.5.1)
benchmark-malloc (~> 0.1.0)
benchmark-perf (~> 0.5.0)
benchmark-trend (~> 0.3.0)
rspec (>= 3.0.0, < 4.0.0)
rspec-core (3.5.4)
rspec-support (~> 3.5.0)
Спасибо большое!