Reputation: 2497
I am using Ruby Rspec to test a webapp that doesn't use rails, thus I don't have a rails_helper.rb, just a spec_helper.rb. I can manually trigger a screenshot but I can't figure out how to trigger the screenshots on a failure.
spec_helper.rb:
# frozen-string-literal: true
require 'rspec'
require 'capybara/rspec'
require 'capybara-screenshot/rspec'
require 'capybara/dsl'
require 'selenium-webdriver'
require 'site_prism'
Dir[File.dirname(__FILE__) + '/page_objects/*/*.rb'].each do |page_object|
require page_object
end
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome)
end
Capybara.save_path = "#{Dir.pwd}/screenshots"
Capybara.default_driver = :selenium
Capybara.app_host = "REDACTED"
Capybara.default_max_wait_time = 20
my_spec.rb
describe 'spec' do
before(:each) do
@my_page = login_and_open_my_page
end
it "fails" do
expect(5).to eq(6)
end
end
Upvotes: 0
Views: 546
Reputation: 49900
You should be able to do that in an RSpec after block. You can define that in your RSpec configuration, etc and should basically boil down to
after(:each) do |example|
if example.exception
# Do whatever you want to happen on failure
Capybara.current_session.save_and_open_screenshot
end
end
You'd need that block to run before you reset the session, so it needs to be defined after whatever block you have defined for doing the reset.
Upvotes: 3