Можно ли отлаживать модульные тесты в Ruby on Rails?

Итак, я просто перешел к новому проекту, который построен на Ruby on Rails. Я новичок в этом, и я все еще это изучаю. Я могу отлаживать большую часть кода приложения, но, похоже, я не могу отлаживать код и код unit test, который тестируется.

Когда я запускаю модульное тестирование в режиме отладки, я могу установить точку останова в коде класса unit test, например, когда добавлены приборы, но контрольные точки не работают внутри кода метода тестирования и не работают внутри проверенного кода, где они работать во время обычного рабочего процесса. Все остальные команды используют команду print для unit test отладки.

Итак, возможно ли даже отлаживать unit test код в rails?

Мы используем jruby 1.3.1, rails-2.3.1, и я использую IntelliJ IDEA для отладки, также я в порядке, если мне нужно переключиться на затмение или netbeans.

EDIT: на самом деле, "нет, это невозможно" также будет полезным ответом, если вы знаете, что это так. По крайней мере, я бы прекратил тратить время на это

Ответы

Ответ 1

Да, это возможно.

Прежде всего, вы должны установить ruby-debug.

sudo gem install ruby-debug

тогда вы пишете

отладчик

непосредственно перед тем, как вы хотите начать отладку.

Следующий шаг: выполните ваши модульные тесты, как вы бы делали нормально.

В тот момент, когда ruby ​​достигает строки, содержащей директиву отладчика, она остановится и покажет вам консольное приглашение.

Теперь вы можете отлаживать то же самое, что и с gdb.

Эта ссылка объясняет это очень красиво: http://blog.nanorails.com/articles/2006/07/14/a-better-rails-debugger-ruby-debug

Я надеюсь, что эта информация будет полезна вам.

Ответ 2

В качестве (позднего) обновления вы также можете использовать byebug, который предназначен для отладки Ruby 2.

Он также включен по умолчанию в Gemfile, который поставляется с любым новым проектом Rails, а также есть хороший учебник в Руководство по приложениям для отладки Rails.

Вы можете просто вставить

byebug

в любом месте тестового файла, а затем запустите тест, как обычно.