leifcr-capybara-screenshot 1.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|