1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Retrive screenshot in relative path of current directory

In Rails engine `Rails.root `returns the path of the dummy application.
Therefore, there is no `tmp` directly where the test is running, so can
not get the screenshot.
For this reason, instead of directly specifying tmp, retrive screenshot by
relative path from the current directory.

Fixes #30405
This commit is contained in:
yuuji.yaginuma 2017-08-26 18:39:40 +09:00
parent ca2a66abef
commit 52422f2af6
3 changed files with 39 additions and 13 deletions

View file

@ -1,3 +1,9 @@
* Make `take_failed_screenshot` work within engine.
Fixes #30405.
*Yuji Yaginuma*
* Deprecate `ActionDispatch::TestResponse` response aliases * Deprecate `ActionDispatch::TestResponse` response aliases
`#success?`, `#missing?` & `#error?` are not supported by the actual `#success?`, `#missing?` & `#error?` are not supported by the actual

View file

@ -44,11 +44,15 @@ module ActionDispatch
end end
def image_path def image_path
"tmp/screenshots/#{image_name}.png" @image_path ||= absolute_image_path.relative_path_from(Pathname.pwd).to_s
end
def absolute_image_path
Rails.root.join("tmp/screenshots/#{image_name}.png")
end end
def save_image def save_image
page.save_screenshot(Rails.root.join(image_path)) page.save_screenshot(absolute_image_path)
end end
def output_type def output_type
@ -69,10 +73,10 @@ module ActionDispatch
case output_type case output_type
when "artifact" when "artifact"
message << "\e]1338;url=artifact://#{image_path}\a\n" message << "\e]1338;url=artifact://#{absolute_image_path}\a\n"
when "inline" when "inline"
name = inline_base64(File.basename(image_path)) name = inline_base64(File.basename(absolute_image_path))
image = inline_base64(File.read(image_path)) image = inline_base64(File.read(absolute_image_path))
message << "\e]1337;File=name=#{name};height=400px;inline=1:#{image}\a\n" message << "\e]1337;File=name=#{name};height=400px;inline=1:#{image}\a\n"
end end

View file

@ -8,23 +8,29 @@ class ScreenshotHelperTest < ActiveSupport::TestCase
test "image path is saved in tmp directory" do test "image path is saved in tmp directory" do
new_test = DrivenBySeleniumWithChrome.new("x") new_test = DrivenBySeleniumWithChrome.new("x")
assert_equal "tmp/screenshots/x.png", new_test.send(:image_path) Rails.stub :root, Pathname.getwd do
assert_equal "tmp/screenshots/x.png", new_test.send(:image_path)
end
end end
test "image path includes failures text if test did not pass" do test "image path includes failures text if test did not pass" do
new_test = DrivenBySeleniumWithChrome.new("x") new_test = DrivenBySeleniumWithChrome.new("x")
new_test.stub :passed?, false do Rails.stub :root, Pathname.getwd do
assert_equal "tmp/screenshots/failures_x.png", new_test.send(:image_path) new_test.stub :passed?, false do
assert_equal "tmp/screenshots/failures_x.png", new_test.send(:image_path)
end
end end
end end
test "image path does not include failures text if test skipped" do test "image path does not include failures text if test skipped" do
new_test = DrivenBySeleniumWithChrome.new("x") new_test = DrivenBySeleniumWithChrome.new("x")
new_test.stub :passed?, false do Rails.stub :root, Pathname.getwd do
new_test.stub :skipped?, true do new_test.stub :passed?, false do
assert_equal "tmp/screenshots/x.png", new_test.send(:image_path) new_test.stub :skipped?, true do
assert_equal "tmp/screenshots/x.png", new_test.send(:image_path)
end
end end
end end
end end
@ -36,13 +42,23 @@ class ScreenshotHelperTest < ActiveSupport::TestCase
new_test = DrivenBySeleniumWithChrome.new("x") new_test = DrivenBySeleniumWithChrome.new("x")
new_test.stub :passed?, false do Rails.stub :root, Pathname.getwd do
assert_match "\e]1338;url=artifact://tmp/screenshots/failures_x.png\a", new_test.send(:display_image) new_test.stub :passed?, false do
assert_match %r|url=artifact://.+?tmp/screenshots/failures_x\.png|, new_test.send(:display_image)
end
end end
ensure ensure
ENV["RAILS_SYSTEM_TESTING_SCREENSHOT"] = original_output_type ENV["RAILS_SYSTEM_TESTING_SCREENSHOT"] = original_output_type
end end
end end
test "image path returns the relative path from current directory" do
new_test = DrivenBySeleniumWithChrome.new("x")
Rails.stub :root, Pathname.getwd.join("..") do
assert_equal "../tmp/screenshots/x.png", new_test.send(:image_path)
end
end
end end
class RackTestScreenshotsTest < DrivenByRackTest class RackTestScreenshotsTest < DrivenByRackTest