Запуск отладки ruby ​​в rspec? - PullRequest
73 голосов
/ 27 марта 2011

Я пытаюсь запустить 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.

Спасибо, Джастин.

Ответы [ 6 ]

68 голосов
/ 27 марта 2011

Вы получите то, что хотите, включив 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 такие требования, чтобы pry-debugger был доступен для всех моих спецификаций.

27 голосов
/ 27 марта 2011

Вы можете создать файл конфигурации .rspec в корне вашего проекта и включить строку:

--debug
22 голосов
/ 06 сентября 2012

для Ruby> = 1.9.2

Вы должны установить отладчик gem вместо ruby-debug19. Если вы используете bundler , вы просто помещаете это в свой Gemfile:

group :test do
  gem "debugger"
end

После этого вы можете просто поставить

rspec <3.0 </h3> --debug rspec> = 3,0

-rdebugger

в вашем .rspec файле

Тогда вы можете просто запустить

bundle exec rake spec

без каких-либо дополнительных аргументов. нет необходимости изменять исходный код (даже не тестовый исходный код)

16 голосов
/ 04 сентября 2013

Для 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
9 голосов
/ 18 апреля 2012

Лучший способ отладки в 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, чтобы открыть интерактивную консоль отладчика, управляющую миром!

4 голосов
/ 29 июня 2014

Лучший и самый чистый вариант - использовать --require в вашем файле .rspec.То, что вы кладете, зависит от того, какой гем вы используете для отладки.

--color
--require pry
--require rails_helper

Они соответствуют параметрам командной строки (-d или --debug устарели).

Не стесняйтесь использовать debugger, ruby-debug или pry (pry-rails в вашем Gemfile).

Для вашего Gemfile:

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

Помещение require 'ruby-debug' и т. Д. В начало вашей спецификациипросто более тесно связаны - тем более что здесь самый популярный комментарий предлагает поместить его по отдельности во ВСЕ ваши файлы.С новым файлом .rspec вам больше не нужно помещать require 'spec_helper' или require 'rails_helper' вверху ваших файлов.

Они имеют больше смысла в качестве неявных аргументов командной строки.

...