it-swarm.com.ru

Запуск отладки Ruby в 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.

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

73
Allyl Isocyanate

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

68
Christopher Maujean

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

--debug
27
zetetic

Для Ruby> = 1.9.2

Вы должны установить отладчик гем вместо 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. То, что вы положите, зависит от того, какой драгоценный камень вы используете для отладки.

--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' вверху ваших файлов.

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

4
Ryan Taylor