在rspec中运行rubydebugging?
我试图让Rubydebugging器运行在我的规范之一:
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可用于我的所有规格。
您可以在项目的根目录中创build一个.rspec
configuration文件,并包含以下行:
--debug
对于Ruby> = 1.9.2
您应该安装debugging器 gem 而不是 ruby-debug19。 它使用捆绑器 ,你只需把它放在你的Gemfile中:
group :test do gem "debugger" end
之后,你可以放
rspec <3.0
--debug
rspec> = 3.0
-rdebugger
在你的.rspec
文件中
然后你可以运行
bundle exec rake spec
没有任何额外的参数。 没有必要修改你的源代码 (甚至不是你的testing源代码)
对于ruby2.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
我发现在rSpec中debugging的最好方法是将以下内容添加到“spec_helper.rb”文件中
def logger Rails.logger end
然后,您可以访问rSpec文件中的所有logging器方法,并将标记日志logging等function合并在一起。 这当然是针对Rails 3以上的。 如果你有Rails 3之前的任何东西,然后添加这个,而不是:
def logger RAILS_DEFAULT_LOGGER end
一旦你有你的日志声明,你可以input
tail -f log/test.log
在您的terminalshell中,以便在testing运行时观察您的日志logging。
当然在你的实际rspectesting中,你可以input诸如
logger.debug "#{1.class}" # => Fixnum
如果你想从你的testing日志的其余部分过滤掉你的debugging语句,只需要在你的debugging语句中添加一个随机string,然后将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来打开一个统治世界的交互式debugging器控制台!
最好和最干净的select是在您的.rspec
文件中使用--require
。 你放什么取决于你用来debugging的gem。
--color --require pry --require rails_helper
这些对应于命令行选项(-d或–debug现已被弃用)。
随意使用debugger
, ruby-debug
或pry(pry-rails在你的Gemfile中)。
对于你的Gemfile:
group :test, :development do gem 'pry-rails' end
把require 'ruby-debug'
等放在你的规范的顶部是更加紧密 – 特别是因为这里最高的投票评论build议把它单独放在所有的文件。 使用新的.rspec
文件,您require 'rails_helper'
在文件顶部放置require 'spec_helper'
或require 'rails_helper'
。
作为隐含的命令行参数,它们更有意义。