如何使用 pry 调试器检查 rspec 变量

Posted

技术标签:

【中文标题】如何使用 pry 调试器检查 rspec 变量【英文标题】:How to examine rspec variables with pry debugger 【发布时间】:2013-07-24 03:46:46 【问题描述】:

我看到一些 SO 帖子解释了如何使用 pry 进入 rspec 测试并能够做到这一点。但是,一旦到达断点,我就很难显示任何有用的信息。对于下面的这段代码,我想从 pry 控制台检查响应对象:

describe 'happenings' do
  context "#index (GET /api/v1/flat_happenings.json)" do
    before(:each) do
      30.times  FactoryGirl.create(:flat_happening) 
      get "/api/v1/flat_happenings.json"
    end
    describe "should list all flat_happenings" do
      binding.pry
      it  JSON.parse(response.body)["flat_happenings"].length.should eq 30 
    end
  end
end

关于如何做到这一点的任何想法?

【问题讨论】:

【参考方案1】:

您应该将binding.pry 放在it 块内。

【讨论】:

【参考方案2】:

要在规范中使用 pry,我们需要在 spec_helper.rb 文件中添加 require 'pry'。然后我们就可以在任何规范中使用 binding.pry。

【讨论】:

如果您的项目将pry 定义为开发依赖项,而不是运行时依赖项,则可能不建议将require 'pry' 添加到spec_helper.rb 文件中。 Pry 是一个开发 gem,可能不推荐在您的库版本中使用。【参考方案3】:

这应该可行:

describe 'happenings' do
  context "#index (GET /api/v1/flat_happenings.json)" do
    before(:each) do
      30.times  FactoryGirl.create(:flat_happening) 
      get "/api/v1/flat_happenings.json"
    end
    it "should list all flat_happenings" do
      binding.pry
      JSON.parse(response.body)["flat_happenings"].length.should eq 30
    end
  end
end

HTH

【讨论】:

谢谢。您的回答也有效,但正如 Sergey 首先回答的那样,我不得不接受他的回答。【参考方案4】:

我尝试在实际使用时要求 pry,否则,它可能会引入一些不寻常的错误(不寻常但可能会发生) 这意味着如果您只想调试特定的测试,则不需要在您的spec_helper.rb 中使用require 'pry',您可以在要调试的测试中使用require 'pry'

def method_i_am_debugging
  puts 'does stuff'
  require 'pry'
  binding.pry
  # ...
end

【讨论】:

以上是关于如何使用 pry 调试器检查 rspec 变量的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 RSpec 检查 JSON 响应?

使用 Rails.cache 时 Rspec 测试失败,但如果我执行 binding.pry 则通过

如何使用 Rspec 检查 ActiveJob 中排队的内容

如何在 RSpec 测试中为 ActiveRecord 打开 SQL 调试日志记录?

ruby 在RSpec中使用哈希来检查不同的变量/值组合

ruby 在RSpec中使用哈希来检查不同的变量/值组合