fuubar is an instafailing RSpec formatter that uses a progress bar instead of a string of letters and dots as feedback.
gem install fuubar
# or in your Gemfile
gem 'fuubar'
In order to use fuubar, you have three options.
rspec --format Fuubar --color
# .rspec
--format Fuubar
--color
# spec/spec_helper.rb
RSpec.configure do |config|
config.add_formatter 'Fuubar'
end
fuubar exposes an RSpec configuration variable called
fuubar_progress_bar_options
which, when set will be passed directly to
ruby-progressbar which does all the heavy lifting. Take a look at
the ruby-progressbar documentation for details on all of the options
you can pass in.
Let's say for example that you would like to change the format of the bar. You would do that like so:
# spec/spec_helper.rb
RSpec.configure do |config|
config.fuubar_progress_bar_options = { :format => 'My Fuubar! <%B> %p%% %a' }
end
would make it so that, when fuubar is output, it would look something like:
My Fuubar! <================================ > 53.44% 00:12:31
By default fuubar follows RSpec's lead and will dump out a summary of all of the pending specs in the suite once the test run is over. This is a good idea because the additional noise is a nudge to fix those tests. We realize however that not all teams have the luxury of implementing all of the pending specs and therefore fuubar gives you the option of supressing that summary.
# spec/spec_helper.rb
RSpec.configure do |config|
config.fuubar_output_pending_results = false
end
By default fuubar refreshes the bar only between each spec. You can enable an auto-refresh feature that will keep refreshing the bar (and therefore the ETA) every second. You can enable the feature as follows:
# spec/spec_helper.rb
RSpec.configure do |config|
config.fuubar_auto_refresh = true
end
Unfortunately this option doesn't play well with things like debuggers, as having a bar show up every second would be undesireable (which is why the feature is disabled by default). Depending on what you are using, you may be given ways to work around this problem.
Pry provides hooks that can be used to disable fuubar during a debugging session, you could for example add the following to your spec helper:
# spec/spec_helper.rb
Pry.config.hooks.add_hook(:before_session, :disable_fuubar_auto_refresh) do |_output, _binding, _pry|
RSpec.configuration.fuubar_auto_refresh = false
end
Pry.config.hooks.add_hook(:after_session, :restore_fuubar_auto_refresh) do |_output, _binding, _pry|
RSpec.configuration.fuubar_auto_refresh = true
end
Unfortunately byebug does not provide hooks, so your best bet is to
disable auto-refresh manually before calling byebug
.
RSpec.configuration.fuubar_auto_refresh = false
byebug
fuubar is cryptographically signed. To be sure the gem you install hasn’t been tampered with, follow these steps:
-
Add my public key (if you haven’t already) as a trusted certificate
gem cert --add <(curl -Ls https://raw.github.com/thekompanee/fuubar/master/certs/thekompanee.pem)
-
Install fuubar telling it to use security checks when possible.
gem install fuubar -P MediumSecurity
Note: The
MediumSecurity
trust profile will verify signed gems, but allow the installation of unsigned dependencies.This is necessary because fuubar has a dependency on RSpec which isn't signed, and therefore we cannot use
HighSecurity
, which requires signed gems.
fuubar was written by Jeff Felchner and Jeff Kreeftmeijer
fuubar is maintained and funded by The Kompanee, Ltd.
The names and logos for The Kompanee are trademarks of The Kompanee, Ltd.
fuubar is Copyright © 2010-2021 Jeff Kreeftmeijer and Jeff Felchner. It is free software, and may be redistributed under the terms specified in the LICENSE file.