leifcr-capybara-screenshot 1.0.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +13 -0
- data/Appraisals +19 -0
- data/CHANGELOG.md +256 -0
- data/Gemfile +9 -0
- data/LICENSE +19 -0
- data/README.md +315 -0
- data/Rakefile +40 -0
- data/capybara-screenshot.gemspec +39 -0
- data/gemfiles/cucumber.1.3.gemfile +11 -0
- data/gemfiles/cucumber.2.4.gemfile +11 -0
- data/gemfiles/latest.gemfile +10 -0
- data/gemfiles/rspec.3.0.gemfile +11 -0
- data/gemfiles/spinach.0.8.gemfile +11 -0
- data/lib/capybara-screenshot/callbacks.rb +44 -0
- data/lib/capybara-screenshot/capybara.rb +26 -0
- data/lib/capybara-screenshot/cucumber.rb +28 -0
- data/lib/capybara-screenshot/helpers.rb +28 -0
- data/lib/capybara-screenshot/minitest.rb +36 -0
- data/lib/capybara-screenshot/pruner.rb +48 -0
- data/lib/capybara-screenshot/rspec/base_reporter.rb +21 -0
- data/lib/capybara-screenshot/rspec/html_embed_reporter.rb +25 -0
- data/lib/capybara-screenshot/rspec/html_link_reporter.rb +37 -0
- data/lib/capybara-screenshot/rspec/json_reporter.rb +19 -0
- data/lib/capybara-screenshot/rspec/text_reporter.rb +39 -0
- data/lib/capybara-screenshot/rspec/textmate_link_reporter.rb +19 -0
- data/lib/capybara-screenshot/rspec.rb +95 -0
- data/lib/capybara-screenshot/s3_saver.rb +64 -0
- data/lib/capybara-screenshot/saver.rb +131 -0
- data/lib/capybara-screenshot/spinach.rb +26 -0
- data/lib/capybara-screenshot/testunit.rb +39 -0
- data/lib/capybara-screenshot/version.rb +5 -0
- data/lib/capybara-screenshot.rb +217 -0
- data/spec/cucumber/cucumber_spec.rb +89 -0
- data/spec/cucumber/step_definitions/step_definitions.rb +18 -0
- data/spec/cucumber/support/env.rb +17 -0
- data/spec/feature/minitest_spec.rb +79 -0
- data/spec/feature/testunit_spec.rb +77 -0
- data/spec/rspec/rspec_spec.rb +158 -0
- data/spec/spec_helper.rb +34 -0
- data/spec/spinach/spinach_spec.rb +60 -0
- data/spec/spinach/support/spinach_failure.rb +41 -0
- data/spec/support/aruba.rb +2 -0
- data/spec/support/common_setup.rb +67 -0
- data/spec/support/html_reporter_context.rb +28 -0
- data/spec/support/test_app.rb +13 -0
- data/spec/unit/base_reporter_spec.rb +25 -0
- data/spec/unit/capybara-screenshot_rspec_spec.rb +48 -0
- data/spec/unit/capybara-screenshot_spec.rb +121 -0
- data/spec/unit/capybara_spec.rb +50 -0
- data/spec/unit/pruner_spec.rb +108 -0
- data/spec/unit/rspec_reporters/html_embed_reporter_spec.rb +18 -0
- data/spec/unit/rspec_reporters/html_link_reporter_spec.rb +27 -0
- data/spec/unit/rspec_reporters/text_reporter_spec.rb +98 -0
- data/spec/unit/rspec_reporters/textmate_link_reporter_spec.rb +39 -0
- data/spec/unit/s3_saver_spec.rb +132 -0
- data/spec/unit/saver_spec.rb +366 -0
- metadata +264 -0
@@ -0,0 +1,217 @@
|
|
1
|
+
module Capybara
|
2
|
+
module Screenshot
|
3
|
+
class << self
|
4
|
+
attr_accessor :autosave_on_failure
|
5
|
+
attr_accessor :registered_drivers
|
6
|
+
attr_accessor :filename_prefix_formatters
|
7
|
+
attr_accessor :append_timestamp
|
8
|
+
attr_accessor :append_random
|
9
|
+
attr_accessor :webkit_options
|
10
|
+
attr_writer :final_session_name
|
11
|
+
attr_accessor :prune_strategy
|
12
|
+
attr_accessor :s3_configuration
|
13
|
+
attr_accessor :alternative_root
|
14
|
+
end
|
15
|
+
|
16
|
+
self.autosave_on_failure = true
|
17
|
+
self.registered_drivers = {}
|
18
|
+
self.filename_prefix_formatters = {}
|
19
|
+
self.append_timestamp = true
|
20
|
+
self.append_random = false
|
21
|
+
self.webkit_options = {}
|
22
|
+
self.prune_strategy = :keep_all
|
23
|
+
self.s3_configuration = {}
|
24
|
+
self.alternative_root = ''
|
25
|
+
|
26
|
+
def self.append_screenshot_path=(value)
|
27
|
+
$stderr.puts "WARNING: Capybara::Screenshot.append_screenshot_path is deprecated. " +
|
28
|
+
"Please use Capybara::Screenshot::RSpec.add_link_to_screenshot_for_failed_examples instead."
|
29
|
+
RSpec.add_link_to_screenshot_for_failed_examples = value
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.screenshot_and_save_page
|
33
|
+
saver = new_saver(Capybara, Capybara.page)
|
34
|
+
if saver.save
|
35
|
+
{:html => saver.html_path, :image => saver.screenshot_path}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.screenshot_and_open_image
|
40
|
+
require "launchy"
|
41
|
+
|
42
|
+
saver = new_saver(Capybara, Capybara.page, false)
|
43
|
+
if saver.save
|
44
|
+
Launchy.open saver.screenshot_path
|
45
|
+
{:html => nil, :image => saver.screenshot_path}
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
class << self
|
50
|
+
alias screen_shot_and_save_page screenshot_and_save_page
|
51
|
+
alias screen_shot_and_open_image screenshot_and_open_image
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.filename_prefix_for(test_type, test)
|
55
|
+
filename_prefix_formatters.fetch(test_type) { |key|
|
56
|
+
filename_prefix_formatters[:default]
|
57
|
+
}.call(test)
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.capybara_alt_root
|
61
|
+
@capybara_root ||= if !alternative_root.blank?
|
62
|
+
alternative_root
|
63
|
+
elsif defined?(::Rails) && ::Rails.root.present?
|
64
|
+
::Rails.root.join capybara_tmp_path
|
65
|
+
elsif defined?(Padrino)
|
66
|
+
File.expand_path(capybara_tmp_path, Padrino.root)
|
67
|
+
elsif defined?(Sinatra)
|
68
|
+
File.join(Sinatra::Application.root, capybara_tmp_path)
|
69
|
+
else
|
70
|
+
capybara_tmp_path
|
71
|
+
end.to_s
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.capybara_root
|
75
|
+
@capybara_root ||= if defined?(::Rails) && ::Rails.root.present?
|
76
|
+
::Rails.root.join capybara_tmp_path
|
77
|
+
elsif defined?(Padrino)
|
78
|
+
File.expand_path(capybara_tmp_path, Padrino.root)
|
79
|
+
elsif defined?(Sinatra)
|
80
|
+
File.join(Sinatra::Application.root, capybara_tmp_path)
|
81
|
+
else
|
82
|
+
capybara_tmp_path
|
83
|
+
end.to_s
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.register_driver(driver, &block)
|
87
|
+
self.registered_drivers[driver] = block
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.register_filename_prefix_formatter(test_type, &block)
|
91
|
+
self.filename_prefix_formatters[test_type] = block
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.final_session_name
|
95
|
+
@final_session_name || Capybara.session_name || :default
|
96
|
+
end
|
97
|
+
|
98
|
+
# Prune screenshots based on prune_strategy
|
99
|
+
# Will run only once unless force:true
|
100
|
+
def self.prune(options = {})
|
101
|
+
reset_prune_history if options[:force]
|
102
|
+
Capybara::Screenshot::Pruner.new(Capybara::Screenshot.prune_strategy).prune_old_screenshots unless @pruned_previous_screenshots
|
103
|
+
@pruned_previous_screenshots = true
|
104
|
+
end
|
105
|
+
|
106
|
+
# Reset prune history allowing further prunining on next failure
|
107
|
+
def self.reset_prune_history
|
108
|
+
@pruned_previous_screenshots = nil
|
109
|
+
end
|
110
|
+
|
111
|
+
def self.new_saver(*args)
|
112
|
+
saver = Saver.new(*args)
|
113
|
+
|
114
|
+
unless s3_configuration.empty?
|
115
|
+
require 'capybara-screenshot/s3_saver'
|
116
|
+
saver = S3Saver.new_with_configuration(saver, s3_configuration)
|
117
|
+
end
|
118
|
+
|
119
|
+
return saver
|
120
|
+
end
|
121
|
+
|
122
|
+
def self.after_save_html &block
|
123
|
+
Saver.after_save_html &block
|
124
|
+
end
|
125
|
+
|
126
|
+
def self.after_save_screenshot &block
|
127
|
+
Saver.after_save_screenshot &block
|
128
|
+
end
|
129
|
+
|
130
|
+
private
|
131
|
+
|
132
|
+
# If the path isn't set, default to the current directory
|
133
|
+
def self.capybara_tmp_path
|
134
|
+
# `#save_and_open_page_path` is deprecated
|
135
|
+
# https://github.com/jnicklas/capybara/blob/48ab1ede946dec2250a2d1d8cbb3313f25096456/History.md#L37
|
136
|
+
if Capybara.respond_to?(:save_path)
|
137
|
+
Capybara.save_path
|
138
|
+
else
|
139
|
+
Capybara.save_and_open_page_path
|
140
|
+
end || '.'
|
141
|
+
end
|
142
|
+
|
143
|
+
# Configure the path unless '.'
|
144
|
+
def self.capybara_tmp_path=(path)
|
145
|
+
return if path == '.'
|
146
|
+
|
147
|
+
# `#save_and_open_page_path` is deprecated
|
148
|
+
# https://github.com/jnicklas/capybara/blob/48ab1ede946dec2250a2d1d8cbb3313f25096456/History.md#L37
|
149
|
+
if Capybara.respond_to?(:save_path)
|
150
|
+
Capybara.save_path = path
|
151
|
+
else
|
152
|
+
Capybara.save_and_open_page_path = path
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
# Register driver renderers.
|
159
|
+
# The block should return `:not_supported` if a screenshot could not be saved.
|
160
|
+
Capybara::Screenshot.class_eval do
|
161
|
+
register_driver(:default) do |driver, path|
|
162
|
+
driver.render(path)
|
163
|
+
end
|
164
|
+
|
165
|
+
register_driver(:rack_test) do |driver, path|
|
166
|
+
:not_supported
|
167
|
+
end
|
168
|
+
|
169
|
+
register_driver(:mechanize) do |driver, path|
|
170
|
+
:not_supported
|
171
|
+
end
|
172
|
+
|
173
|
+
register_driver(:selenium) do |driver, path|
|
174
|
+
driver.browser.save_screenshot(path)
|
175
|
+
end
|
176
|
+
|
177
|
+
register_driver(:poltergeist) do |driver, path|
|
178
|
+
driver.render(path, :full => true)
|
179
|
+
end
|
180
|
+
|
181
|
+
register_driver(:poltergeist_billy) do |driver, path|
|
182
|
+
driver.render(path, :full => true)
|
183
|
+
end
|
184
|
+
|
185
|
+
webkit_block = proc do |driver, path|
|
186
|
+
if driver.respond_to?(:save_screenshot)
|
187
|
+
driver.save_screenshot(path, webkit_options)
|
188
|
+
else
|
189
|
+
driver.render(path)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
register_driver :webkit, &webkit_block
|
194
|
+
register_driver :webkit_debug, &webkit_block
|
195
|
+
|
196
|
+
register_driver(:terminus) do |driver, path|
|
197
|
+
if driver.respond_to?(:save_screenshot)
|
198
|
+
driver.save_screenshot(path)
|
199
|
+
else
|
200
|
+
:not_supported
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
# Register filename prefix formatters
|
206
|
+
Capybara::Screenshot.class_eval do
|
207
|
+
register_filename_prefix_formatter(:default) do |test|
|
208
|
+
'screenshot'
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
require 'capybara/dsl'
|
213
|
+
require 'capybara/util/save_and_open_page' if Capybara::VERSION.match(/^\d+/)[0] == '1' # no longer needed in Capybara version 2
|
214
|
+
|
215
|
+
require 'capybara-screenshot/saver'
|
216
|
+
require 'capybara-screenshot/capybara'
|
217
|
+
require 'capybara-screenshot/pruner'
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "Using Capybara::Screenshot with Cucumber" do
|
4
|
+
include CommonSetup
|
5
|
+
|
6
|
+
let(:cmd) { 'cucumber' }
|
7
|
+
|
8
|
+
def run_failing_case(failure_message, code)
|
9
|
+
run_case code
|
10
|
+
expect(last_command_started.output).to match(failure_message)
|
11
|
+
end
|
12
|
+
|
13
|
+
def run_case(code, options = {})
|
14
|
+
write_file('features/support/env.rb', <<-RUBY)
|
15
|
+
#{ensure_load_paths_valid}
|
16
|
+
require 'cucumber/support/env.rb'
|
17
|
+
#{setup_test_app}
|
18
|
+
RUBY
|
19
|
+
|
20
|
+
write_file('features/step_definitions/step_definitions.rb', <<-RUBY)
|
21
|
+
%w(lib spec).each do |include_folder|
|
22
|
+
$LOAD_PATH.unshift(File.join('#{gem_root}', include_folder))
|
23
|
+
end
|
24
|
+
require 'cucumber/step_definitions/step_definitions.rb'
|
25
|
+
RUBY
|
26
|
+
|
27
|
+
write_file('features/cucumber.feature', code)
|
28
|
+
|
29
|
+
run_simple_with_retry cmd, false
|
30
|
+
|
31
|
+
expect(last_command_started.output).to_not match(/failed|failure/i) if options[:assert_all_passed]
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'saves a screenshot on failure' do
|
35
|
+
run_failing_case %q{Unable to find link or button "you'll never find me"}, <<-CUCUMBER
|
36
|
+
Feature: Failure
|
37
|
+
Scenario: Failure
|
38
|
+
Given I visit "/"
|
39
|
+
And I click on a missing link
|
40
|
+
CUCUMBER
|
41
|
+
expect('tmp/my_screenshot.html').to have_file_content('This is the root page')
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'saves a screenshot on an error' do
|
45
|
+
run_failing_case %q{you can't handle me}, <<-CUCUMBER
|
46
|
+
Feature: Failure
|
47
|
+
Scenario: Failure
|
48
|
+
Given I visit "/"
|
49
|
+
And I trigger an unhandled exception
|
50
|
+
CUCUMBER
|
51
|
+
expect('tmp/my_screenshot.html').to have_file_content('This is the root page')
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'saves a screenshot for the correct session for failures using_session' do
|
55
|
+
run_failing_case(%q{Unable to find link or button "you'll never find me"}, <<-CUCUMBER)
|
56
|
+
Feature: Failure
|
57
|
+
Scenario: Failure in different session
|
58
|
+
Given I visit "/"
|
59
|
+
And I click on a missing link on a different page in a different session
|
60
|
+
CUCUMBER
|
61
|
+
expect('tmp/my_screenshot.html').to have_file_content('This is a different page')
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'pruning' do
|
65
|
+
before do
|
66
|
+
create_screenshot_for_pruning
|
67
|
+
configure_prune_strategy :last_run
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'on failure it prunes previous screenshots when strategy is set' do
|
71
|
+
run_failing_case %q{Unable to find link or button "you'll never find me"}, <<-CUCUMBER
|
72
|
+
Feature: Prune
|
73
|
+
Scenario: Screenshots are pruned if strategy is set
|
74
|
+
Given I visit "/"
|
75
|
+
And I click on a missing link
|
76
|
+
CUCUMBER
|
77
|
+
assert_screenshot_pruned
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'on success it never prunes' do
|
81
|
+
run_case <<-CUCUMBER, assert_all_passed: true
|
82
|
+
Feature: Prune
|
83
|
+
Scenario: Screenshots are pruned if strategy is set
|
84
|
+
Given I visit "/"
|
85
|
+
CUCUMBER
|
86
|
+
assert_screenshot_not_pruned
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
When(/^I click on a missing link$/) do
|
2
|
+
click_on "you'll never find me"
|
3
|
+
end
|
4
|
+
|
5
|
+
When(/^I click on a missing link on a different page in a different session$/) do
|
6
|
+
using_session :different_session do
|
7
|
+
visit '/different_page'
|
8
|
+
click_on "you'll never find me"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
When(/^I visit "([^"]*)"$/) do |path|
|
13
|
+
visit path
|
14
|
+
end
|
15
|
+
|
16
|
+
Then(/^I trigger an unhandled exception/) do
|
17
|
+
raise "you can't handle me"
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'capybara/cucumber'
|
2
|
+
require 'capybara-screenshot'
|
3
|
+
require 'capybara-screenshot/cucumber'
|
4
|
+
require 'aruba/cucumber'
|
5
|
+
require 'aruba/config/jruby'
|
6
|
+
|
7
|
+
Capybara::Screenshot.register_filename_prefix_formatter(:cucumber) do |fault|
|
8
|
+
'my_screenshot'
|
9
|
+
end
|
10
|
+
|
11
|
+
Before do
|
12
|
+
@aruba_timeout_seconds = 60
|
13
|
+
end if RUBY_PLATFORM == 'java'
|
14
|
+
|
15
|
+
After('@restore-capybara-default-session') do
|
16
|
+
Capybara.session_name = nil
|
17
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "Using Capybara::Screenshot with MiniTest" do
|
4
|
+
include CommonSetup
|
5
|
+
|
6
|
+
def run_failing_case(code)
|
7
|
+
write_file('test_failure.rb', <<-RUBY)
|
8
|
+
#{ensure_load_paths_valid}
|
9
|
+
require 'minitest/autorun'
|
10
|
+
require 'capybara'
|
11
|
+
require 'capybara-screenshot'
|
12
|
+
require 'capybara-screenshot/minitest'
|
13
|
+
|
14
|
+
#{setup_test_app}
|
15
|
+
Capybara::Screenshot.register_filename_prefix_formatter(:minitest) do |test_case|
|
16
|
+
test_name = test_case.respond_to?(:name) ? test_case.name : test_case.__name__
|
17
|
+
raise "expected fault" unless test_name.include? 'test_failure'
|
18
|
+
'my_screenshot'
|
19
|
+
end
|
20
|
+
|
21
|
+
#{code}
|
22
|
+
RUBY
|
23
|
+
|
24
|
+
cmd = 'bundle exec ruby test_failure.rb'
|
25
|
+
run_simple_with_retry cmd, false
|
26
|
+
expect(last_command_started.output).to include %q{Unable to find link or button "you'll never find me"}
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'saves a screenshot on failure' do
|
30
|
+
run_failing_case <<-RUBY
|
31
|
+
class TestFailure < MiniTest::Unit::TestCase
|
32
|
+
include Capybara::DSL
|
33
|
+
|
34
|
+
def test_failure
|
35
|
+
visit '/'
|
36
|
+
assert(page.body.include?('This is the root page'))
|
37
|
+
click_on "you'll never find me"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
RUBY
|
41
|
+
expect('tmp/my_screenshot.html').to have_file_content('This is the root page')
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'saves a screenshot for the correct session for failures using_session' do
|
45
|
+
run_failing_case <<-RUBY
|
46
|
+
class TestFailure < Minitest::Unit::TestCase
|
47
|
+
include Capybara::DSL
|
48
|
+
|
49
|
+
def test_failure
|
50
|
+
visit '/'
|
51
|
+
assert(page.body.include?('This is the root page'))
|
52
|
+
using_session :different_session do
|
53
|
+
visit '/different_page'
|
54
|
+
assert(page.body.include?('This is a different page'))
|
55
|
+
click_on "you'll never find me"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
RUBY
|
60
|
+
expect('tmp/my_screenshot.html').to have_file_content('This is a different page')
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'prunes screenshots on failure' do
|
64
|
+
create_screenshot_for_pruning
|
65
|
+
configure_prune_strategy :last_run
|
66
|
+
run_failing_case <<-RUBY
|
67
|
+
class TestFailure < Minitest::Unit::TestCase
|
68
|
+
include Capybara::DSL
|
69
|
+
|
70
|
+
def test_failure
|
71
|
+
visit '/'
|
72
|
+
assert(page.body.include?('This is the root page'))
|
73
|
+
click_on "you'll never find me"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
RUBY
|
77
|
+
assert_screenshot_pruned
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "Using Capybara::Screenshot with Test::Unit" do
|
4
|
+
include CommonSetup
|
5
|
+
|
6
|
+
def run_failing_case(code, integration_path = '.')
|
7
|
+
write_file("#{integration_path}/test_failure.rb", <<-RUBY)
|
8
|
+
#{ensure_load_paths_valid}
|
9
|
+
require 'test/unit'
|
10
|
+
require 'capybara'
|
11
|
+
require 'capybara/rspec'
|
12
|
+
require 'capybara-screenshot'
|
13
|
+
require 'capybara-screenshot/testunit'
|
14
|
+
|
15
|
+
#{setup_test_app}
|
16
|
+
Capybara::Screenshot.register_filename_prefix_formatter(:testunit) do | fault |
|
17
|
+
raise "expected fault" unless fault.exception.message.include? %q{Unable to find link or button "you'll never find me"}
|
18
|
+
'my_screenshot'
|
19
|
+
end
|
20
|
+
|
21
|
+
class TestFailure < Test::Unit::TestCase
|
22
|
+
include Capybara::DSL
|
23
|
+
|
24
|
+
def test_failure
|
25
|
+
#{code}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
RUBY
|
29
|
+
|
30
|
+
cmd = "bundle exec ruby #{integration_path}/test_failure.rb"
|
31
|
+
run_simple_with_retry cmd, false
|
32
|
+
expect(last_command_started.output).to include %q{Unable to find link or button "you'll never find me"}
|
33
|
+
end
|
34
|
+
|
35
|
+
it "saves a screenshot on failure for any test in path 'test/integration'" do
|
36
|
+
run_failing_case <<-RUBY, 'test/integration'
|
37
|
+
visit '/'
|
38
|
+
assert(page.body.include?('This is the root page'))
|
39
|
+
click_on "you'll never find me"
|
40
|
+
RUBY
|
41
|
+
expect('tmp/my_screenshot.html').to have_file_content('This is the root page')
|
42
|
+
end
|
43
|
+
|
44
|
+
it "does not generate a screenshot for tests that are not in 'test/integration'" do
|
45
|
+
run_failing_case <<-RUBY, 'test/something-else'
|
46
|
+
visit '/'
|
47
|
+
assert(page.body.include?('This is the root page'))
|
48
|
+
click_on "you'll never find me"
|
49
|
+
RUBY
|
50
|
+
|
51
|
+
expect('tmp/my_screenshot.html').to_not be_an_existing_file
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'saves a screenshot for the correct session for failures using_session' do
|
55
|
+
run_failing_case <<-RUBY, 'test/integration'
|
56
|
+
visit '/'
|
57
|
+
assert(page.body.include?('This is the root page'))
|
58
|
+
using_session :different_session do
|
59
|
+
visit '/different_page'
|
60
|
+
assert(page.body.include?('This is a different page'))
|
61
|
+
click_on "you'll never find me"
|
62
|
+
end
|
63
|
+
RUBY
|
64
|
+
expect('tmp/my_screenshot.html').to have_file_content('This is a different page')
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'prunes screenshots on failure' do
|
68
|
+
create_screenshot_for_pruning
|
69
|
+
configure_prune_strategy :last_run
|
70
|
+
run_failing_case <<-RUBY, 'test/integration'
|
71
|
+
visit '/'
|
72
|
+
assert(page.body.include?('This is the root page'))
|
73
|
+
click_on "you'll never find me"
|
74
|
+
RUBY
|
75
|
+
assert_screenshot_pruned
|
76
|
+
end
|
77
|
+
end
|