Подтвердить что ты не робот

Запуск отладки ruby ​​в rspec?

Я пытаюсь запустить Ruby debugger в одном из моих спецификаций:

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.

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

4b9b3361

Ответ 1

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

Ответ 2

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

--debug

Ответ 3

Для Ruby >= 1.9.2

Вы должны установить debugger драгоценный камень вместо ruby-debug19. Это вы используете bundler, вы просто поместите это в свой Gemfile:

group :test do
  gem "debugger"
end

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

rspec < 3.0

--debug

rspec >= 3.0

-rdebugger

в файле .rspec

Затем вы можете просто запустить

bundle exec rake spec

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

Ответ 4

Для 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

Ответ 5

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

Update

Я изменил свое мнение по этому поводу. Вы должны установить pry, pry-doc и pry-debug, pry-debugger и pry-rails. Затем используйте bind.pry в своем коде, чтобы открыть интерактивную консоль отладчика, которая управляет миром!

Ответ 6

Самый лучший и самый чистый вариант - использовать --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' в начало ваших файлов.

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