Запуск отладки 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.
Спасибо,
Джастин.
Ответы
Ответ 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'
в начало ваших файлов.
Они имеют больше смысла в качестве неявных аргументов командной строки.