在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一个.rspecconfiguration文件,并包含以下行:

 --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现已被弃用)。

随意使用debuggerruby-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'

作为隐含的命令行参数,它们更有意义。