byebug Gem
[byebug]Gemの導入と使い方
Gemfileに以下のように記述する(railsをインストールしている場合は、デフォルトでインストールされている)
gem 'byebug'
↓
$ bundle install
↓
下記のようにデバッグしたいところに[byebug]を記述する
[spec/system/task_spec.rb] RSpec.describe 'Task', type: :system do let(:project) { create(:project) } describe 'Task削除' do context '正常系' do # FIXME: テストが失敗するので修正してください it 'Taskが削除されること' do task = FactoryBot.create(:task, title: "test_title", project_id: project.id) visit project_tasks_path(project) click_link 'Destroy' page.driver.browser.switch_to.alert.accept byebug expect(page).not_to have_content task.title expect(Task.count).to eq 0 expect(current_path).to eq project_tasks_path(project) end end end
上記のように記述して、以下のようにテストを実行すると[byebug]を記述した部分で処理が止まり、下記のように表示される
$ bundle exec rspec
例えば、[next]を入力して実行すると次の行に移動する
※ポイント
・下記のように[help]を入力して実行すると、[byebug]で処理が止まっているところで使えるコマンドが確認できる
・下記のように記述して実行するファイルを指定することもできる
$ byebug 実行するファイル名
・下記のようなコードがあり、[byebug]で処理を止めたところで[page.body]を実行するとRSpec上でのブラウザの表示画面のHTMLが確認できる
describe 'Task削除' do context '正常系' do # FIXME: テストが失敗するので修正してください it 'Taskが削除されること' do task = FactoryBot.create(:task, title: "test_title", project_id: project.id) visit project_tasks_path(project) click_link 'Destroy' page.driver.browser.switch_to.alert.accept byebug expect(page).not_to have_content task.title expect(Task.count).to eq 0 expect(current_path).to eq project_tasks_path(project) end end end
下記が[page.body]を実行して得られたRSpecのブラウザ上のHTML
[/n]は、改行を示している
・[byebug]で処理を止めている箇所で変数の確認をすることもできる
参考記事: