我正在尝试让 Ruby 调试器在我的规格之一中运行:
describe User do
it "should be valid" do
debugger
User.new.should be_valid
end
end
但是,当我运行 rspec 时,我得到:
debugger statement ignored, use -d or --debug option to enable debugging
我尝试了以下方法:
rake spec --debug
rake spec --debug --trace
rake spec:models --debug
bundle exec rspec --debug
bundle exec rspec --debug spec/models/
bundle exec rspec --d spec/models/
bundle exec "rspec --debug" spec/models/
bundle exec rspec --debugger spec/models/
bundle exec --debugger rspec spec/models/
bundle --debugger exec rspec spec/models/
bundle --debugger exec rspec spec/models/
bundle exec --debugger rspec spec/models/
bundle exec rspec --debugger spec/models/
关于如何以正确的方式执行 rspec 的任何想法?我在 Rails 3.0.5、Ruby 1.9.2、RSpec 2.5.1、ruby-debug19 上。
谢谢,贾斯汀。
通过在规范顶部包含 require 'ruby-debug'
,您将获得所需的内容:
# spec/models/user_spec.rb
require 'spec_helper'
require 'ruby-debug'
describe User do
it "should be valid" do
debugger
User.new.should be_valid
end
end
然后您将正常运行 rake spec
或 rspec
注意:我现在更喜欢 Ruby 2.0+ 和 pry。这几乎是相同的过程:
require 'spec_helper'
require 'pry-debugger'
describe User do
it "should be valid" do
binding.pry
expect(User.new).to be_valid
end
end
此外,我通常会在我的 spec_helper 文件中添加这样的要求,以便 pry-debugger 可用于我的所有规范。
您可以在项目的根目录中创建一个 .rspec
配置文件并包含以下行:
--debug
invalid option: --debug (defined in ./.rspec)
对于 Ruby >= 1.9.2
您应该安装 debugger gem 而不是 ruby-debug19。如果您使用 bundler,您只需将其放入您的 Gemfile 中:
group :test do
gem "debugger"
end
之后你可以放
rspec < 3.0
--debug
rspec >= 3.0
-rdebugger
在您的 .rspec
文件中
然后你可以运行
bundle exec rake spec
没有任何额外的论据。也不需要修改你的源代码(甚至你的测试源代码)
debugger
语句)。此外,如果您使用 spork 运行测试,则 rdb 提示符将出现在 spork 控制台中,它不会回显您输入的内容。似乎在没有 spork 的情况下最容易运行。
对于 ruby 2.0,我使用 byebug:https://github.com/deivid-rodriguez/byebug
gem 'byebug'
代码:
# spec/models/user_spec.rb
require 'spec_helper'
require 'byebug'
describe User do
it "should be valid" do
byebug
User.new.should be_valid
end
end
debugger
而不是 byebug
?
我发现在 rSpec 中调试的最佳方法是将以下内容添加到您的“spec_helper.rb”文件中
def logger
Rails.logger
end
然后,您可以访问 rSpec 文件中的所有记录器方法并合并诸如标记日志记录之类的内容。这当然适用于 Rails 3 及更高版本。如果您在 Rails 3 之前有任何内容,请添加以下内容:
def logger
RAILS_DEFAULT_LOGGER
end
准备好日志记录后,您可以输入
tail -f log/test.log
在您的终端外壳中,以便在运行测试时查看您的日志记录语句。
当然,在您的实际 rspec 测试中,您会输入诸如
logger.debug "#{1.class}" # => Fixnum
如果您想从测试日志的其余部分中过滤调试语句,只需在调试语句前添加一个随机字符串,然后将 tail 命令的输出通过管道传输到 grep。
例子:
logger.debug "random_string #{1.class}" # => Fixnum
tail -f log/test.log | grep random_string
更新
我已经改变了对此的看法。您应该安装 pry、pry-doc 和 pry-debug、pry-debugger 和 pry-rails。然后在你的代码中使用 binding.pry 来打开一个交互式调试器控制台来统治世界!
logger.debug "#{1.class}"
记录调试语句您的调试语句。
最好和最干净的选项是在您的 .rspec
文件中使用 --require
。您放置的内容取决于您用于调试的 gem。
--color
--require pry
--require rails_helper
这些对应于命令行选项(现在不推荐使用 -d 或 --debug)。
随意使用 debugger
、ruby-debug
或 pry
(您的 Gemfile 中的撬轨)。
对于您的 Gemfile:
group :test, :development do
gem 'pry-rails'
end
将 require 'ruby-debug'
等放在规范的顶部只是更紧密地耦合 - 特别是因为这里投票最多的评论建议将它单独放在所有文件中。使用新的 .rspec
文件,您不再需要将 require 'spec_helper'
或 require 'rails_helper'
放在文件的顶部。
它们作为隐式命令行参数更有意义。
不定期副业成功案例分享
"pry-rails"
和"pry-byebug"
,所以我会使用require 'pry-rails'
。同样在 Gemfile 中,它们需要包含在test environment