82

我正在尝试让 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 上。

谢谢,贾斯汀。

4

6 回答 6

76

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 specrspec正常运行

注意:我现在更喜欢 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 可用于我的所有规范。

于 2011-03-27T02:26:48.977 回答
27

.rspec您可以在项目的根目录中创建一个配置文件并包含以下行:

--debug
于 2011-03-27T05:05:00.257 回答
22

对于 Ruby >= 1.9.2

您应该安装调试器gem而不是ruby​​-debug19。如果您使用bundler,您只需将其放入您的 Gemfile 中:

group :test do
  gem "debugger"
end

之后你可以放

rspec < 3.0

--debug

rspec >= 3.0

-rdebugger

在你的.rspec文件中

然后你可以运行

bundle exec rake spec

没有任何额外的论点。也不需要修改你的源代码(甚至你的测试源代码)

于 2012-09-06T07:13:40.987 回答
19

对于 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
于 2013-09-04T12:24:01.830 回答
9

我发现在 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 来打开一个交互式调试器控制台来统治世界!

于 2012-04-17T21:38:37.477 回答
4

最好和最干净的选择是--require在您的.rspec文件中使用。您放置的内容取决于您用于调试的 gem。

--color
--require pry
--require rails_helper

这些对应于命令行选项(现在不推荐使用 -d 或 --debug)。

随意使用debuggerruby-debugpry(在您的 Gemfile 中撬动导轨)。

对于您的 Gemfile:

group :test, :development do
  gem 'pry-rails'
end

将 etc.放在require 'ruby-debug'您的规范顶部只是更紧密地耦合 - 特别是因为这里投票最多的评论建议将它单独放在您的所有文件中。使用新.rspec文件,您不再需要将require 'spec_helper'require 'rails_helper'放在文件的顶部。

它们作为隐式命令行参数更有意义。

于 2014-06-29T04:05:35.813 回答