web-dev-qa-db-ja.com

Ruby debug in rspec?

私の仕様のいずれかで実行中のデバッガー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。

ありがとう、ジャスティン。

75

仕様の先頭に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+ and 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

また、pry-debuggerをすべての仕様で使用できるように、通常はspec_helperファイルにこのような要件を設定します。

70

プロジェクトのルートに.rspec構成ファイルを作成し、次の行を含めることができます。

--debug
27
zetetic

Ruby> = 1.9.2

debugger gem ではなく Ruby-debug19をインストールする必要があります。 bundler を使用する場合、これをGemfileに入れるだけです:

group :test do
  gem "debugger"
end

その後、あなたはちょうど置くことができます

rspec <3.0

--debug

rspec> = 3.0

-rdebugger

あなたの.rspecファイル

その後、ちょうど実行することができます

bundle exec rake spec

追加の引数なし。 ソースコードを変更する必要はありませんのいずれか(テストソースコードでもない)

22
Jarl

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
16
drinor

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を使用して、世界を支配する対話型デバッガーコンソールを開きます!

9
Ode

最良かつ最もクリーンなオプションは、--requireあなたの.rspecファイル。配置する内容は、デバッグに使用するgemによって異なります。

--color
--require pry
--require Rails_helper

これらはコマンドラインオプションに対応しています(-dまたは--debugは非推奨になりました)。

debuggerRuby-debugまたはpry(Gemfileのpry-Rails)。

Gemfileの場合:

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

置くrequire 'Ruby-debug'など、仕様の最上部にあるものは、より緊密に結合されています。特に、ここでは、上位のコメントがすべてのファイルに個別に配置することを示唆しているためです。新しい.rspec置く必要のないファイルrequire 'spec_helper'またはrequire 'Rails_helper'もうファイルの先頭に。

暗黙のコマンドライン引数としてより意味があります。

4
Ryan Taylor