82

私の仕様の 1 つで 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 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 ファイルにこのような require を入れて、すべての spec で pry-debugger を使用できるようにします。

于 2011-03-27T02:26:48.977 に答える
27

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

--debug
于 2011-03-27T05:05:00.257 に答える
22

Ruby >= 1.9.2 の場合

ruby-debug19の代わりにデバッガーgemをインストールする必要があります。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-debugまたはpry(Gemfile の pry-rails) を自由に使用してください。

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 に答える