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,132 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'capybara-screenshot/s3_saver'
|
3
|
+
|
4
|
+
describe Capybara::Screenshot::S3Saver do
|
5
|
+
let(:saver) { double('saver') }
|
6
|
+
let(:bucket_name) { double('bucket_name') }
|
7
|
+
let(:s3_client) { double('s3_client') }
|
8
|
+
|
9
|
+
let(:s3_saver) { Capybara::Screenshot::S3Saver.new(saver, s3_client, bucket_name) }
|
10
|
+
|
11
|
+
describe '.new_with_configuration' do
|
12
|
+
let(:access_key_id) { double('access_key_id') }
|
13
|
+
let(:secret_access_key) { double('secret_access_key') }
|
14
|
+
let(:s3_client_credentials_using_defaults) {
|
15
|
+
{
|
16
|
+
access_key_id: access_key_id,
|
17
|
+
secret_access_key: secret_access_key
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
let(:region) { double('region') }
|
22
|
+
let(:s3_client_credentials) {
|
23
|
+
s3_client_credentials_using_defaults.merge(region: region)
|
24
|
+
}
|
25
|
+
|
26
|
+
it 'destructures the configuration into its components' do
|
27
|
+
allow(Aws::S3::Client).to receive(:new).and_return(s3_client)
|
28
|
+
allow(Capybara::Screenshot::S3Saver).to receive(:new)
|
29
|
+
|
30
|
+
Capybara::Screenshot::S3Saver.new_with_configuration(saver, {
|
31
|
+
s3_client_credentials: s3_client_credentials,
|
32
|
+
bucket_name: bucket_name
|
33
|
+
})
|
34
|
+
|
35
|
+
expect(Aws::S3::Client).to have_received(:new).with(s3_client_credentials)
|
36
|
+
expect(Capybara::Screenshot::S3Saver).to have_received(:new).with(saver, s3_client, bucket_name)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'defaults the region to us-east-1' do
|
40
|
+
default_region = 'us-east-1'
|
41
|
+
|
42
|
+
allow(Aws::S3::Client).to receive(:new).and_return(s3_client)
|
43
|
+
allow(Capybara::Screenshot::S3Saver).to receive(:new)
|
44
|
+
|
45
|
+
Capybara::Screenshot::S3Saver.new_with_configuration(saver, {
|
46
|
+
s3_client_credentials: s3_client_credentials_using_defaults,
|
47
|
+
bucket_name: bucket_name
|
48
|
+
})
|
49
|
+
|
50
|
+
expect(Aws::S3::Client).to have_received(:new).with(
|
51
|
+
s3_client_credentials.merge(region: default_region)
|
52
|
+
)
|
53
|
+
|
54
|
+
expect(Capybara::Screenshot::S3Saver).to have_received(:new).with(saver, s3_client, bucket_name)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#save' do
|
59
|
+
before do
|
60
|
+
allow(saver).to receive(:html_saved?).and_return(false)
|
61
|
+
allow(saver).to receive(:screenshot_saved?).and_return(false)
|
62
|
+
allow(saver).to receive(:save)
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'calls save on the underlying saver' do
|
66
|
+
expect(saver).to receive(:save)
|
67
|
+
|
68
|
+
s3_saver.save
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'uploads the html' do
|
72
|
+
html_path = '/foo/bar.html'
|
73
|
+
expect(saver).to receive(:html_path).and_return(html_path)
|
74
|
+
expect(saver).to receive(:html_saved?).and_return(true)
|
75
|
+
|
76
|
+
html_file = double('html_file')
|
77
|
+
|
78
|
+
expect(File).to receive(:open).with(html_path).and_yield(html_file)
|
79
|
+
|
80
|
+
expect(s3_client).to receive(:put_object).with(
|
81
|
+
bucket: bucket_name,
|
82
|
+
key: 'bar.html',
|
83
|
+
body: html_file
|
84
|
+
)
|
85
|
+
|
86
|
+
s3_saver.save
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'uploads the screenshot' do
|
90
|
+
screenshot_path = '/baz/bim.jpg'
|
91
|
+
expect(saver).to receive(:screenshot_path).and_return(screenshot_path)
|
92
|
+
expect(saver).to receive(:screenshot_saved?).and_return(true)
|
93
|
+
|
94
|
+
screenshot_file = double('screenshot_file')
|
95
|
+
|
96
|
+
expect(File).to receive(:open).with(screenshot_path).and_yield(screenshot_file)
|
97
|
+
|
98
|
+
expect(s3_client).to receive(:put_object).with(
|
99
|
+
bucket: bucket_name,
|
100
|
+
key: 'bim.jpg',
|
101
|
+
body: screenshot_file
|
102
|
+
)
|
103
|
+
|
104
|
+
s3_saver.save
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# Needed because we cannot depend on Verifying Doubles
|
109
|
+
# in older RSpec versions
|
110
|
+
describe 'an actual saver' do
|
111
|
+
it 'implements the methods needed by the s3 saver' do
|
112
|
+
instance_methods = Capybara::Screenshot::Saver.instance_methods
|
113
|
+
|
114
|
+
expect(instance_methods).to include(:save)
|
115
|
+
expect(instance_methods).to include(:html_saved?)
|
116
|
+
expect(instance_methods).to include(:html_path)
|
117
|
+
expect(instance_methods).to include(:screenshot_saved?)
|
118
|
+
expect(instance_methods).to include(:screenshot_path)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe 'any other method' do
|
123
|
+
it 'transparently passes through to the saver' do
|
124
|
+
allow(saver).to receive(:foo_bar)
|
125
|
+
|
126
|
+
args = double('args')
|
127
|
+
s3_saver.foo_bar(*args)
|
128
|
+
|
129
|
+
expect(saver).to have_received(:foo_bar).with(*args)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,366 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Capybara::Screenshot::Saver do
|
4
|
+
before(:all) do
|
5
|
+
@original_drivers = Capybara::Screenshot.registered_drivers
|
6
|
+
Capybara::Screenshot.registered_drivers[:default] = lambda {|driver, path| driver.render(path) }
|
7
|
+
end
|
8
|
+
|
9
|
+
after(:all) do
|
10
|
+
Capybara::Screenshot.registered_drivers = @original_drivers
|
11
|
+
end
|
12
|
+
|
13
|
+
before do
|
14
|
+
allow(Capybara::Screenshot).to receive(:capybara_root).and_return(capybara_root)
|
15
|
+
Timecop.freeze(Time.local(2012, 6, 7, 8, 9, 10, 0))
|
16
|
+
end
|
17
|
+
|
18
|
+
let(:capybara_root) { '/tmp' }
|
19
|
+
let(:timestamp) { '2012-06-07-08-09-10.000' }
|
20
|
+
let(:file_basename) { "screenshot_#{timestamp}" }
|
21
|
+
let(:screenshot_path) { "#{capybara_root}/#{file_basename}.png" }
|
22
|
+
|
23
|
+
let(:driver_mock) { double('Capybara driver').as_null_object }
|
24
|
+
let(:page_mock) {
|
25
|
+
double('Capybara session page', :body => 'body', :driver => driver_mock).as_null_object.tap do |m|
|
26
|
+
allow(m).to receive(:current_path).and_return('/')
|
27
|
+
end
|
28
|
+
}
|
29
|
+
let(:capybara_mock) {
|
30
|
+
double(Capybara).as_null_object.tap do |m|
|
31
|
+
allow(m).to receive(:current_driver).and_return(:default)
|
32
|
+
end
|
33
|
+
}
|
34
|
+
|
35
|
+
let(:saver) { Capybara::Screenshot::Saver.new(capybara_mock, page_mock) }
|
36
|
+
|
37
|
+
context 'html filename with Capybara Version 1' do
|
38
|
+
before do
|
39
|
+
stub_const("Capybara::VERSION", '1')
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'has a default format of "screenshot_Y-M-D-H-M-S.ms.html"' do
|
43
|
+
expect(capybara_mock).to receive(:save_page).with('body', File.join(capybara_root, "#{file_basename}.html"))
|
44
|
+
|
45
|
+
saver.save
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'uses name argument as prefix' do
|
49
|
+
saver = Capybara::Screenshot::Saver.new(capybara_mock, page_mock, true, 'custom-prefix')
|
50
|
+
|
51
|
+
expect(capybara_mock).to receive(:save_page).with('body', File.join(capybara_root, "custom-prefix_#{timestamp}.html"))
|
52
|
+
|
53
|
+
saver.save
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'html filename with Capybara Version 2' do
|
58
|
+
before do
|
59
|
+
stub_const("Capybara::VERSION", '2')
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'has a default format of "screenshot_Y-M-D-H-M-S.ms.html"' do
|
63
|
+
expect(capybara_mock).to receive(:save_page).with(File.join(capybara_root, "#{file_basename}.html"))
|
64
|
+
|
65
|
+
saver.save
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'uses name argument as prefix' do
|
69
|
+
saver = Capybara::Screenshot::Saver.new(capybara_mock, page_mock, true, 'custom-prefix')
|
70
|
+
|
71
|
+
expect(capybara_mock).to receive(:save_page).with(File.join(capybara_root, "custom-prefix_#{timestamp}.html"))
|
72
|
+
|
73
|
+
saver.save
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context 'screenshot image path' do
|
78
|
+
it 'is in capybara root output' do
|
79
|
+
expect(driver_mock).to receive(:render).with(/^#{capybara_root}\//)
|
80
|
+
|
81
|
+
saver.save
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'has a default filename format of "screenshot_Y-M-D-H-M-S.ms.png"' do
|
85
|
+
expect(driver_mock).to receive(:render).with(/#{file_basename}\.png$/)
|
86
|
+
|
87
|
+
saver.save
|
88
|
+
end
|
89
|
+
|
90
|
+
it "does not append timestamp if append_timestamp is false " do
|
91
|
+
default_config = Capybara::Screenshot.append_timestamp
|
92
|
+
Capybara::Screenshot.append_timestamp = false
|
93
|
+
expect(driver_mock).to receive(:render).with(/screenshot.png$/)
|
94
|
+
|
95
|
+
saver.save
|
96
|
+
Capybara::Screenshot.append_timestamp = default_config
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'uses filename prefix argument as basename prefix' do
|
100
|
+
saver = Capybara::Screenshot::Saver.new(capybara_mock, page_mock, true, 'custom-prefix')
|
101
|
+
expect(driver_mock).to receive(:render).with(/#{capybara_root}\/custom-prefix_#{timestamp}\.png$/)
|
102
|
+
|
103
|
+
saver.save
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'does not save html if false passed as html argument' do
|
108
|
+
saver = Capybara::Screenshot::Saver.new(capybara_mock, page_mock, false)
|
109
|
+
expect(capybara_mock).to_not receive(:save_page)
|
110
|
+
|
111
|
+
saver.save
|
112
|
+
expect(saver).to_not be_html_saved
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'does not save if current_path is empty' do
|
116
|
+
allow(page_mock).to receive(:current_path).and_return(nil)
|
117
|
+
expect(capybara_mock).to_not receive(:save_page)
|
118
|
+
expect(driver_mock).to_not receive(:render)
|
119
|
+
|
120
|
+
saver.save
|
121
|
+
expect(saver).to_not be_screenshot_saved
|
122
|
+
expect(saver).to_not be_html_saved
|
123
|
+
end
|
124
|
+
|
125
|
+
context 'when saving a screenshot fails' do
|
126
|
+
it 'still restores the original value of Capybara.save_and_open_page_path' do
|
127
|
+
Capybara::Screenshot.capybara_tmp_path = 'tmp/bananas'
|
128
|
+
|
129
|
+
expect(capybara_mock).to receive(:save_page).and_raise
|
130
|
+
|
131
|
+
expect {
|
132
|
+
saver.save
|
133
|
+
}.to raise_error(RuntimeError)
|
134
|
+
|
135
|
+
if Capybara.respond_to?(:save_path)
|
136
|
+
expect(Capybara.save_path).to eq('tmp/bananas')
|
137
|
+
else
|
138
|
+
expect(Capybara.save_and_open_page_path).to eq('tmp/bananas')
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
describe '#output_screenshot_path' do
|
144
|
+
let(:saver) { Capybara::Screenshot::Saver.new(capybara_mock, page_mock) }
|
145
|
+
|
146
|
+
before do
|
147
|
+
allow(saver).to receive(:html_path) { 'page.html' }
|
148
|
+
allow(saver).to receive(:screenshot_path) { 'screenshot.png' }
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'outputs the path for the HTML screenshot' do
|
152
|
+
allow(saver).to receive(:html_saved?).and_return(true)
|
153
|
+
expect(saver).to receive(:output).with("HTML screenshot: page.html")
|
154
|
+
saver.output_screenshot_path
|
155
|
+
end
|
156
|
+
|
157
|
+
it 'outputs the path for the Image screenshot' do
|
158
|
+
allow(saver).to receive(:screenshot_saved?).and_return(true)
|
159
|
+
expect(saver).to receive(:output).with("Image screenshot: screenshot.png")
|
160
|
+
saver.output_screenshot_path
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
describe 'callbacks' do
|
165
|
+
let(:saver) { Capybara::Screenshot::Saver.new(capybara_mock, page_mock) }
|
166
|
+
|
167
|
+
before do
|
168
|
+
allow(saver).to receive(:html_path) { 'page.html' }
|
169
|
+
allow(saver).to receive(:screenshot_path) { 'screenshot.png' }
|
170
|
+
end
|
171
|
+
|
172
|
+
before :all do
|
173
|
+
Capybara::Screenshot.after_save_html do |path|
|
174
|
+
puts "after_save_html ran with #{path}"
|
175
|
+
end
|
176
|
+
Capybara::Screenshot.after_save_screenshot do |path|
|
177
|
+
puts "after_save_screenshot ran with #{path}"
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
after :all do
|
182
|
+
Capybara::Screenshot::Saver.instance_eval { @callbacks = nil }
|
183
|
+
end
|
184
|
+
|
185
|
+
it 'runs after_save_html callbacks' do
|
186
|
+
expect do
|
187
|
+
saver.save
|
188
|
+
end.to output(/after_save_html ran with page\.html/).to_stdout
|
189
|
+
end
|
190
|
+
|
191
|
+
it 'runs after_save_screenshot callbacks' do
|
192
|
+
expect do
|
193
|
+
saver.save
|
194
|
+
end.to output(/after_save_screenshot ran with screenshot\.png/).to_stdout
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
describe "with selenium driver" do
|
199
|
+
before do
|
200
|
+
allow(capybara_mock).to receive(:current_driver).and_return(:selenium)
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'saves via browser' do
|
204
|
+
browser_mock = double('browser')
|
205
|
+
expect(driver_mock).to receive(:browser).and_return(browser_mock)
|
206
|
+
expect(browser_mock).to receive(:save_screenshot).with(screenshot_path)
|
207
|
+
|
208
|
+
saver.save
|
209
|
+
expect(saver).to be_screenshot_saved
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
describe "with poltergeist driver" do
|
214
|
+
before do
|
215
|
+
allow(capybara_mock).to receive(:current_driver).and_return(:poltergeist)
|
216
|
+
end
|
217
|
+
|
218
|
+
it 'saves driver render with :full => true' do
|
219
|
+
expect(driver_mock).to receive(:render).with(screenshot_path, {:full => true})
|
220
|
+
|
221
|
+
saver.save
|
222
|
+
expect(saver).to be_screenshot_saved
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
describe "with poltergeist_billy driver" do
|
227
|
+
before do
|
228
|
+
allow(capybara_mock).to receive(:current_driver).and_return(:poltergeist_billy)
|
229
|
+
end
|
230
|
+
|
231
|
+
it 'saves driver render with :full => true' do
|
232
|
+
expect(driver_mock).to receive(:render).with(screenshot_path, {:full => true})
|
233
|
+
|
234
|
+
saver.save
|
235
|
+
expect(saver).to be_screenshot_saved
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
describe "with webkit driver" do
|
240
|
+
before do
|
241
|
+
allow(capybara_mock).to receive(:current_driver).and_return(:webkit)
|
242
|
+
end
|
243
|
+
|
244
|
+
context 'has render method' do
|
245
|
+
before do
|
246
|
+
allow(driver_mock).to receive(:respond_to?).with(:'save_screenshot').and_return(false)
|
247
|
+
end
|
248
|
+
|
249
|
+
it 'saves driver render' do
|
250
|
+
expect(driver_mock).to receive(:render).with(screenshot_path)
|
251
|
+
|
252
|
+
saver.save
|
253
|
+
expect(saver).to be_screenshot_saved
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
context 'has save_screenshot method' do
|
258
|
+
let(:webkit_options){ {width: 800, height: 600} }
|
259
|
+
|
260
|
+
before do
|
261
|
+
allow(driver_mock).to receive(:respond_to?).with(:'save_screenshot').and_return(true)
|
262
|
+
end
|
263
|
+
|
264
|
+
it 'saves driver render' do
|
265
|
+
expect(driver_mock).to receive(:save_screenshot).with(screenshot_path, {})
|
266
|
+
|
267
|
+
saver.save
|
268
|
+
expect(saver).to be_screenshot_saved
|
269
|
+
end
|
270
|
+
|
271
|
+
it 'passes webkit_options to driver' do
|
272
|
+
allow(Capybara::Screenshot).to receive(:webkit_options).and_return( webkit_options )
|
273
|
+
expect(driver_mock).to receive(:save_screenshot).with(screenshot_path, webkit_options)
|
274
|
+
|
275
|
+
saver.save
|
276
|
+
expect(saver).to be_screenshot_saved
|
277
|
+
end
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
describe "with webkit debug driver" do
|
282
|
+
before do
|
283
|
+
allow(capybara_mock).to receive(:current_driver).and_return(:webkit_debug)
|
284
|
+
end
|
285
|
+
|
286
|
+
context 'has render method' do
|
287
|
+
before do
|
288
|
+
allow(driver_mock).to receive(:respond_to?).with(:'save_screenshot').and_return(false)
|
289
|
+
end
|
290
|
+
|
291
|
+
it 'saves driver render' do
|
292
|
+
expect(driver_mock).to receive(:render).with(screenshot_path)
|
293
|
+
|
294
|
+
saver.save
|
295
|
+
expect(saver).to be_screenshot_saved
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
context 'has save_screenshot method' do
|
300
|
+
let(:webkit_options){ {width: 800, height: 600} }
|
301
|
+
|
302
|
+
before do
|
303
|
+
allow(driver_mock).to receive(:respond_to?).with(:'save_screenshot').and_return(true)
|
304
|
+
end
|
305
|
+
|
306
|
+
it 'saves driver render' do
|
307
|
+
expect(driver_mock).to receive(:save_screenshot).with(screenshot_path, {})
|
308
|
+
|
309
|
+
saver.save
|
310
|
+
expect(saver).to be_screenshot_saved
|
311
|
+
end
|
312
|
+
|
313
|
+
it 'passes webkit_options to driver' do
|
314
|
+
allow(Capybara::Screenshot).to receive(:webkit_options).and_return( webkit_options )
|
315
|
+
expect(driver_mock).to receive(:save_screenshot).with(screenshot_path, webkit_options)
|
316
|
+
|
317
|
+
saver.save
|
318
|
+
expect(saver).to be_screenshot_saved
|
319
|
+
end
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
describe "with unknown driver" do
|
324
|
+
before do
|
325
|
+
allow(capybara_mock).to receive(:current_driver).and_return(:unknown)
|
326
|
+
allow(saver).to receive(:warn).and_return(nil)
|
327
|
+
end
|
328
|
+
|
329
|
+
it 'saves driver render' do
|
330
|
+
expect(driver_mock).to receive(:render).with(screenshot_path)
|
331
|
+
|
332
|
+
saver.save
|
333
|
+
expect(saver).to be_screenshot_saved
|
334
|
+
end
|
335
|
+
|
336
|
+
it 'outputs warning about unknown results' do
|
337
|
+
# Not pure mock testing
|
338
|
+
expect(saver).to receive(:warn).with(/screenshot driver for 'unknown'.*unknown results/).and_return(nil)
|
339
|
+
|
340
|
+
saver.save
|
341
|
+
expect(saver).to be_screenshot_saved
|
342
|
+
end
|
343
|
+
|
344
|
+
describe "with rack_test driver" do
|
345
|
+
before do
|
346
|
+
allow(capybara_mock).to receive(:current_driver).and_return(:rack_test)
|
347
|
+
end
|
348
|
+
|
349
|
+
it 'indicates that a screenshot could not be saved' do
|
350
|
+
saver.save
|
351
|
+
expect(saver).to_not be_screenshot_saved
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
describe "with mechanize driver" do
|
356
|
+
before do
|
357
|
+
allow(capybara_mock).to receive(:current_driver).and_return(:mechanize)
|
358
|
+
end
|
359
|
+
|
360
|
+
it 'indicates that a screenshot could not be saved' do
|
361
|
+
saver.save
|
362
|
+
expect(saver).to_not be_screenshot_saved
|
363
|
+
end
|
364
|
+
end
|
365
|
+
end
|
366
|
+
end
|