开发者

Cucumber step to pause and hand control over to the user

I'm having trouble debugging cucumber steps due to unique conditions of the testing environment. I wish there was a step that could pause a selenium test and let me take over.

E.g.

Scenario: I want to take over here
  Given: A bunch of steps have already run
  When: I'm stuck on an error
  Then: I want to take control of t开发者_运维问答he mouse

At that point I could interact with the application exactly as if I had done all the previous steps myself after running rails server -e test

Does such a step exist, or is there a way to make it happen?


You can integrate ruby-debug into your Cucumber tests. Nathaniel Ritmeyer has directions here and here which worked for me. You essentially require ruby-debug, start the debugger in your environment file, and then put "breakpoint" where ever you want to see what's going on. You can both interact with the browser/application and see the values of your ruby variables in the test. (I'm not sure whether it'll let you see the variables in your rails application itself - I'm not testing against a rails app to check that).


I came up with the idea to dump the database. It doesn't let you continue work from the same page, but if you have the app running during the test, you can immediately act on the current state of things in another browser (not the one controlled by Selenium).

Here is the step:

When /I want to take control/i do
  exec "mysqldump -u root --password=* test > #{Rails.root}/support/snapshot.sql"
end

Because it is called by exec, DatabaseCleaner has no chance to truncate tables, so actually it's irrelevant that the command is a database dump. You don't have to import the sql to use the app in its current state, but it's there if you need it.


My teammate has done this using selenium, firebug a hook (@selenium_with_firebug)

Everything he learned came from this blogpost:

http://www.allenwei.cn/tips-add-firebug-extension-to-capybara/


Add the step

And show me the page

Where you want to interact with it

Scenario: I want to take over here
  Given: A bunch of steps have already run
  When: I'm stuck on an error
  Then show me the page


use http://www.natontesting.com/2009/11/09/debugging-cucumber-tests-with-ruby-debug/


Big thank you to @Reed G. Law for the idea of dumping the database. Then loading it into development allowed me to determine exactly why my cucumber feature was not impacting database state as I had expected. Here's my minor tweak to his suggestion:

When /Dump the database/i do
  `MYSQL_PWD=password mysqldump -u root my_test > #{Rails.root}/snapshot.sql`
  # To replicate state in development run:
  # `MYSQL_PWD=password mysql -u root my_development < snapshot.sql`
end

You can also use the following in feature/support/debugging.rb to let you step through the feature one step at a time:

# `STEP=1 cucumber` to pause after each step
AfterStep do |scenario|
  next unless ENV['STEP']
  unless defined?(@counter)
    puts "Stepping through #{scenario.title}"
    @counter = 0
  end
  @counter += 1
  print "At step ##{@counter} of #{scenario.steps.count}. Press Return to"\
        ' execute...'
  STDIN.getc
end
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜