Skip to content

Commit

Permalink
Merge pull request #76 from noniq/improve-output
Browse files Browse the repository at this point in the history
Improve output and reduce clutter
  • Loading branch information
mattheworiordan committed Mar 2, 2014
2 parents 2dbc012 + 237b62d commit 25824af
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 8 deletions.
13 changes: 9 additions & 4 deletions lib/capybara-screenshot.rb
Expand Up @@ -66,18 +66,19 @@ def self.register_filename_prefix_formatter(test_type, &block)
end
end

# Register driver renderers
# Register driver renderers.
# The block should return `:not_supported` if a screenshot could not be saved.
Capybara::Screenshot.class_eval do
register_driver(:default) do |driver, path|
driver.render(path)
end

register_driver(:rack_test) do |driver, path|
warn "Rack::Test capybara driver has no ability to output screen shots. Skipping."
:not_supported
end

register_driver(:mechanize) do |driver, path|
warn "Mechanize capybara driver has no ability to output screen shots. Skipping."
:not_supported
end

register_driver(:selenium) do |driver, path|
Expand All @@ -101,7 +102,11 @@ def self.register_filename_prefix_formatter(test_type, &block)
end

register_driver(:terminus) do |driver, path|
driver.save_screenshot(path) if driver.respond_to?(:save_screenshot)
if driver.respond_to?(:save_screenshot)
driver.save_screenshot(path)
else
:not_supported
end
end
end

Expand Down
3 changes: 2 additions & 1 deletion lib/capybara-screenshot/rspec.rb
Expand Up @@ -13,7 +13,8 @@
saver.save

if Capybara::Screenshot.append_screenshot_path
example.metadata[:full_description] += "\n Screenshot: #{saver.screenshot_path}"
example.metadata[:full_description] += "\n Screenshot: #{saver.screenshot_path}" if saver.screenshot_saved?
example.metadata[:full_description] += "\n HTML page: #{saver.html_path}" if saver.html_saved?
end
end
end
Expand Down
13 changes: 11 additions & 2 deletions lib/capybara-screenshot/saver.rb
Expand Up @@ -28,16 +28,17 @@ def save_html
capybara.save_page("#{path}")
end
end
warn "Saved file #{path}"
@html_saved = true
end

def save_screenshot
path = screenshot_path
clear_save_and_open_page_path do
Capybara::Screenshot.registered_drivers.fetch(capybara.current_driver) { |driver_name|
result = Capybara::Screenshot.registered_drivers.fetch(capybara.current_driver) { |driver_name|
warn "capybara-screenshot could not detect a screenshot driver for '#{capybara.current_driver}'. Saving with default with unknown results."
Capybara::Screenshot.registered_drivers[:default]
}.call(page.driver, path)
@screenshot_saved = result != :not_supported
end
end

Expand All @@ -49,6 +50,14 @@ def screenshot_path
File.join(Capybara::Screenshot.capybara_root, "#{file_base_name}.png")
end

def html_saved?
@html_saved
end

def screenshot_saved?
@screenshot_saved
end

# If Capybara.save_and_open_page_path is set then
# the html_path or screenshot_path can be appended to this path in
# some versions of Capybara instead of using it as an absolute path
Expand Down
34 changes: 33 additions & 1 deletion spec/capybara-screenshot/saver_spec.rb
Expand Up @@ -106,14 +106,17 @@
capybara_mock.should_not_receive(:save_page)

saver.save
saver.html_saved?.should be_false
end

it 'should save if current_path is empty' do
it 'should not save if current_path is empty' do
capybara_mock.stub(:current_path).and_return(nil)
capybara_mock.should_not_receive(:save_page)
driver_mock.should_not_receive(:render)

saver.save
saver.screenshot_saved?.should be_false
saver.html_saved?.should be_false
end

describe "with selenium driver" do
Expand All @@ -127,6 +130,7 @@
browser_mock.should_receive(:save_screenshot).with(screenshot_path)

saver.save
saver.screenshot_saved?.should be_true
end
end

Expand All @@ -139,6 +143,7 @@
driver_mock.should_receive(:render).with(screenshot_path, {:full => true})

saver.save
saver.screenshot_saved?.should be_true
end
end

Expand All @@ -156,6 +161,7 @@
driver_mock.should_receive(:render).with(screenshot_path)

saver.save
saver.screenshot_saved?.should be_true
end
end

Expand All @@ -168,6 +174,7 @@
driver_mock.should_receive(:save_screenshot).with(screenshot_path)

saver.save
saver.screenshot_saved?.should be_true
end
end
end
Expand All @@ -181,6 +188,7 @@
driver_mock.should_receive(:render).with(screenshot_path)

saver.save
saver.screenshot_saved?.should be_true
end
end

Expand All @@ -194,13 +202,37 @@
driver_mock.should_receive(:render).with(screenshot_path)

saver.save
saver.screenshot_saved?.should be_true
end

it 'should output warning about unknown results' do
# Not pure mock testing
saver.should_receive(:warn).with(/screenshot driver for 'unknown'.*unknown results/).and_return(nil)

saver.save
saver.screenshot_saved?.should be_true
end

describe "with rack_test driver" do
before do
capybara_mock.stub(:current_driver).and_return(:rack_test)
end

it 'should indicate that a screenshot could not be saved' do
saver.save
saver.screenshot_saved?.should be_false
end
end

describe "with mechanize driver" do
before do
capybara_mock.stub(:current_driver).and_return(:mechanize)
end

it 'should indicate that a screenshot could not be saved' do
saver.save
saver.screenshot_saved?.should be_false
end
end
end
end

0 comments on commit 25824af

Please sign in to comment.