Ruby on rails 如何调试cumber测试?

Ruby on rails 如何调试cumber测试?,ruby-on-rails,ruby,ruby-on-rails-3,tdd,cucumber,Ruby On Rails,Ruby,Ruby On Rails 3,Tdd,Cucumber,我有: 我打电话到: When /^(?:|I )follow "([^"]*)"(?: within "([^"]*)")?$/ do |link, selector| with_scope(selector) do click_link(link) end end 我的HTML如下所示: Background: Given I am an existing admin user When I follow "CLIENTS" 有没有办法打印HTML或找出测试失败

我有:

我打电话到:

When /^(?:|I )follow "([^"]*)"(?: within "([^"]*)")?$/ do |link, selector|  
  with_scope(selector) do
   click_link(link)
  end
end
我的HTML如下所示:

Background:
  Given I am an existing admin user
  When I follow "CLIENTS"

有没有办法打印HTML或找出测试失败的原因?

我最喜欢的调试步骤的方法是调用
binding.pry

确保
pry
gem包含在gem文件中,用于
:开发、测试
,然后将
绑定.pry
调用放在抛出错误的行之前。然后,您应该能够使用
ls
命令对环境进行内省,如果您可以找到正在运行的capybara会话,则可以(如果capybara会话存储为名为page的变量)
page.html
page.text
查看可见内容


希望有帮助。

您的测试失败,因为您必须导航到某个页面(打开它)。您可以使用capybara的内置方法执行此操作:

Given /^I am an existing admin user$/ do
  role_user = FactoryGirl.create(:role_user)
  admin_user = role_user.user
  sign_in(admin_user)
  save_and_open_page
end
您还可以使用标准ruby调试器进行调试。有关更多信息,请参阅指南。

了解我的经验:

    首先,你应该在“水瓶座”中使用“SaveSyand Apple Opage Page”方法来检查页面上的内容,并考虑并查看它将页面呈现给你所期望的页面。(我认为页面上的“客户端”链接尚未显示)
  • 第二:更改重定向到具有“客户端”链接的页面的路由路径
希望对你有帮助


p/s:如果你按照我的指示,但它不起作用。请给我你的功能和步骤定义。我将尽我所能帮助您

添加以下内容作为features/support/debug.rb的内容,这有助于调试失败的步骤:

visit path_to(url)

通过设置环境变量,您可以使Cucumber使用各种调试工具,并可以通过设置多个环境变量来组合它们。

使用capybara的save_和open_页面,如中所示,也可以使用pry_remote()在功能测试中进行调试。可能需要睡一觉,这样在SPECT中就不会发生超时。这很好,谢谢。可以直接在命令行上设置环境变量。例如“bin/cumber features/mytest.feature LAUNCHY=1”或使用“export LAUNCHY=1”为整个终端会话设置它们
When I follow "<h2>CLIENTS</h2>"
Given /^I am an existing admin user$/ do
  role_user = FactoryGirl.create(:role_user)
  admin_user = role_user.user
  sign_in(admin_user)
  save_and_open_page
end
visit path_to(url)
# `LAUNCHY=1 cucumber` to open page on failure
After do |scenario|
  save_and_open_page if scenario.failed? && ENV['LAUNCHY']
end

# `FAST=1 cucumber` to stop on first failure
After do |scenario|
  Cucumber.wants_to_quit = ENV['FAST'] && scenario.failed?
end

# `DEBUG=1 cucumber` to drop into debugger on failure
After do |scenario|
  next unless ENV['DEBUG'] && scenario.failed?
  puts "Debugging scenario: #{scenario.title}"
  if respond_to? :debugger
    debugger
  elsif binding.respond_to? :pry
    binding.pry
  else
    puts "Can't find debugger or pry to debug"
  end 
end

# `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