0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

認証テストをhelperも駆使してSystem Specを書くまでの流れ

Last updated at Posted at 2021-11-18

前提

factory_botなどの設定は済んでいるものとします。

gems

まずは、以下のgemをインストールします。

group :test do
  gem 'capybara'
  gem 'webdrivers'
end 

spec/rails_helperの編集

次にspec/rails_helper.rbに以下のように追記し、Capybaraが使えるようにします。

require 'capybara/rspec'

RSpec.configure do |config|
  config.include SystemHelper, type: :system
end

headlessの設定

続いて、spec/spec_helper.rbファイルへ以下を追記し、system specをヘッドレスで実行するように設定します。なお、ここでスクリーンサイズも設定することで、レスポンシブ対応での不具合への対処できます。

RSpec.configure do |config|
  config.before(:each, type: :system) do
    driven_by :selenium, using: :headless_chrome, screen_size: [1920, 1080]
  end
end

モジュール化

認証テストを行う際に、何度もログインさせる記述を書くことになるかと思うので、いっそのことモジュールかしておこうと思います。

フォルダ、ファイル名は任意ですが、今回はspec/supports/login_helper.rbファイルにその処理をまとめることにします。

module LoginHelper
  def login
    user = create(:user)
    visit login_path
    fill_in 'メールアドレス', with: user.email
    fill_in 'パスワード', with: 'password'
    click_button 'ログイン'
  end
end

次に、上記で作成したファイルを使えるようにspec/rails_helper.rbを編集します。

Dir[Rails.root.join('spec/supports/**/*.rb')].each { |f| require f }

Rspec.configure do |confgi|
///

以上の設定で、モジュール化したloginメソッドが使用できるようになりました。

spec内容の例

require 'rails_helper'

Rspec.describe 'Authentication', type: :sytem do

  describe 'logout' do
    before do
      login
    end

   it 'is able to logout' do
     click_on 'Log out'
     expect(current_path).to eq login_path
   end
  end
end
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?