summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/development/testing_guide/best_practices.md4
-rw-r--r--spec/support/live_debugger.rb22
2 files changed, 15 insertions, 11 deletions
diff --git a/doc/development/testing_guide/best_practices.md b/doc/development/testing_guide/best_practices.md
index d07a368abfd..12e6ec169e0 100644
--- a/doc/development/testing_guide/best_practices.md
+++ b/doc/development/testing_guide/best_practices.md
@@ -62,10 +62,10 @@ writing one](testing_levels.md#consider-not-writing-a-system-test)!
Sometimes you may need to debug Capybara tests by observing browser behavior.
-You can stall Capybara and view the website on the browser by using the
+You can pause Capybara and view the website on the browser by using the
`live_debug` method in your spec. The current page will be automatically opened
in your default browser.
-You may need to sign-in first (the current user's credentials are displayed in
+You may need to sign in first (the current user's credentials are displayed in
the terminal).
To resume the test run, you only need to press `c`.
diff --git a/spec/support/live_debugger.rb b/spec/support/live_debugger.rb
index b15aba01e68..9c0570bcbf7 100644
--- a/spec/support/live_debugger.rb
+++ b/spec/support/live_debugger.rb
@@ -2,20 +2,24 @@ require 'io/console'
module LiveDebugger
def live_debug
- `open #{current_url}`
-
- puts "\nCurrent example is paused for live debugging"
+ puts "\nCurrent example is paused for live debugging."
+ puts "Opening #{current_url} in your default browser..."
puts "The current user credentials are: #{@current_user.username} / 12345678" if @current_user
- puts "Press 'c' to continue the execution of the example"
+ puts "Press '^C' to continue the execution of the example"
- loop do
- if $stdin.getch == 'c'
- break
- else
- puts "Please press 'c' to continue the execution of the example! ;)"
+ `open #{current_url}`
+
+ catch :unpause_test do
+ trap('INT') { throw :unpause_test }
+ loop do
+ sleep(1)
end
end
+ # If the command is 'DEFAULT', the Ruby's default handler will be invoked.
+ # http://docs.rubydocs.org/rails-4-2-8-ruby-2-3-4/Ruby%202.3.4/classes/Kernel.html#method-i-trap
+ trap('INT') { 'DEFAULT' }
+
puts "Back to the example!"
end
end