ユーザーに関するフィーチャーテストで、ユーザーを削除したらそのユーザーに関連するモデルも削除されることをテストしたいと思いました。
テスト方法
spec/features/users_spec.rb
require 'rails_helper' RSpec.feature "Users", type: :feature do scenario 'user deletes a user' do user = FactoryBot.create(:user) user.funds << FactoryBot.build(:fund) user.ratios << FactoryBot.build(:ratio) user.save visit root_path click_link 'ログイン' fill_in 'メールアドレス', with: user.email fill_in 'パスワード', with: user.password click_button 'ログイン' expect{ click_button '削除' page.driver.browser.switch_to.alert.accept expect(page).to have_content '投資信託管理サービス' }.to change(User, :count).by(-1).and change(Fund, :count).by(-1).and change(Ratio, :count).by(-1) end end
削除ボタンをクリックすると確認ダイアログが表示されるので、Selenium Chromeというドライバーを使用しています。
下から3行目、ひとつのexpectに対してandでchangeを繋いでいき3つのモデルとも削除されているかというテストをしています。
下から3行目、ひとつのexpectに対してandでchangeを繋いでいき3つのモデルとも削除されているかというテストをしています。
$ rspec spec/features Users Capybara starting Puma... * Version 3.12.1 , codename: Llamas in Pajamas * Min threads: 0, max threads: 4 * Listening on tcp://127.0.0.1:59581 user deletes a user Finished in 11.78 seconds (files took 6.52 seconds to load) 2 examples, 0 failures
テストを実行するとブラウザが立ち上がり自動でログインしてユーザー削除をテストしてくれます。