diff options
-rw-r--r-- | doc/development/testing_guide/best_practices.md | 4 | ||||
-rw-r--r-- | spec/support/live_debugger.rb | 22 |
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 |