Sleep Study is an RSpec formatter that shows you which specs are spending the most time in sleep.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Sleep Study

Sleep Study is an RSpec formatter that shows you which specs are spending the most time in sleep, and where exactly in your code those sleeps are happening.

The sleep method can be a useful tool, especially in networking code (eg: backing off after hitting a rate limit, inserting a pause between polls of a remote job status, etc). In your test environment, however, those sleeps are generally unnecessary, and it's easy to forget to stub them and end up with specs that are wasting time sleeping for no reason, adding to your build time. Running Sleep Study will identify these specs for you.


Sleep Study works by putting tracers around every call and return of every C routine that your code calls, and saving benchmarking data if that routine is a sleep function. Ruby code executes a lot of C routines. Those tracers are not free, and having them in place can add an extra 20-25% to your specs' execution time. As such, it's a good idea to run Sleep Study either in a separate CI build, or only occasionally to audit your test suite.


After adding rspec-sleep_study to your Gemfile, run RSpec with the --format RSpec::SleepStudy option.


bundle exec rspec --format RSpec::SleepStudy spec/

The following examples spent the most time in `sleep`:
  20.57 seconds: ./spec/features/user_sends_email_spec.rb:23
    - 7.46 seconds: ./lib/api_client.rb:12
    - 6.752 seconds: ./gems/selenium-webdriver/lib/selenium/webdriver/common/socket_poller.rb:108
  14.06 seconds: ./spec/features/apply_filters_spec.rb:39
    - 5.21 seconds: ./lib/api_client.rb:12
  10.0 seconds: ./spec/features/password_reset_email_spec.rb:22
  10.0 seconds: ./spec/features/password_reset_email_spec.rb:47
  9.06 seconds: ./spec/features/dashboard_spec.rb:49
  8.54 seconds: ./spec/features/apply_filters_spec.rb:96
  8.17 seconds: ./spec/features/dashboard_spec.rb:7
  6.69 seconds: ./spec/features/create_new_widget_spec.rb:26
  6.63 seconds: ./spec/features/create_report_spec.rb:18
  6.41 seconds: ./spec/features/create_new_widget_spec.rb:14