27

多くの場合、テストが失敗すると、失敗の原因を突き止めようとかなりの時間を費やします。テストが失敗したときに RSpec が Ruby デバッガーを起動できると便利です。そうすれば、すぐにローカル変数を調べて原因を掘り下げることができます。

私が現在使用している回避策は次のようになります。

# withing some test
debugger unless some_variable.nil?
expect(some_variable).to be_nil

ただし、このアプローチは面倒です。最初にテストが失敗するのを待ってからデバッガー行を追加し、問題を修正してからデバッガー行を削除する必要があるためですgdb。コードベースにdebuggerステートメントを追加する必要なく、例外が発生します。

編集:プリマスを試しました。それは私にとって十分に確実に機能していません。また、開発履歴を見ると、あまりサポートされていない gem であるように思われるので、あまり依存したくありません。

更新:試してみたところpry-rescue、きちんとしていることがわかりました。しかし、私はzeusをよく使うので、 で動作させる方法があるかどうか疑問に思っていましたpry-rescue

4

7 に答える 7

32

pry-rescueを使用してください。これは plymouth の精神的な後継者です。

Readme から:

RSpec または respec を使用している場合は、レスキュー rspec またはレスキュー respec を使用して、テストが失敗するたびに pry セッションを開くことができます。

$ rescue rspec
From: /home/conrad/0/ruby/pry-rescue/examples/example_spec.rb @ line 9 :

     6:
     7: describe "Float" do
     8:   it "should be able to add" do
 =>  9:     (0.1 + 0.2).should == 0.3
    10:   end
    11: end

RSpec::Expectations::ExpectationNotMetError: expected: 0.3
     got: 0.30000000000000004 (using ==)
[1] pry(main)>
于 2013-04-30T15:07:32.960 に答える
9

@jon-rowe のソリューション (追加の gem は必要ありません) を少し編集して気に入っていRSpec::Expectations::ExpectationNotMetErrorます。

config.around(:each) do |example|
  example.run.tap do |result|
    debugger if result.is_a?(RSpec::Expectations::ExpectationNotMetError)
  end
end
于 2015-10-14T13:51:59.123 に答える
0

そのためにplymouth gem https://github.com/banister/plymouthを使用できます。ただし、 irbの (より良い) 代替手段であるpryを使用しています。

HTH

于 2013-04-30T00:37:46.213 に答える
-1

ハンマータイムを試すことができます。例外が発生するたびに停止し、インタラクティブなデバッグ セッションに入るプロンプトが表示されます。

于 2013-04-30T03:55:53.410 に答える