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