[RUBY] How to use "sign_in" in integration test (RSpec)

Prerequisites

・ RSpec (Gem) has been introduced -RSpec initial file has been created

Implementation method

① Added description to rails_helper.rb

rails_helper.rb


# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../config/environment', __dir__)
# Prevent database truncation if the environment is production
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'rspec/rails'
# Add additional requires below this line. Rails is not loaded until this point!

# Requires supporting ruby files with custom matchers and macros, etc, in
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
# run as spec files by default. This means that files in spec/support that end
# in _spec.rb will both be required and run as specs, causing the specs to be
# run twice. It is recommended that you do not name files matching this glob to
# end with _spec.rb. You can configure this pattern with the --pattern
# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
#
# The following line is provided for convenience purposes. It has the downside
# of increasing the boot-up time by auto-requiring all files in the support
# directory. Alternatively, in the individual `*_spec.rb` files, manually
# require only the support files necessary.
#
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } #<Addition>

# Checks for pending migrations and applies them before tests are run.
# If you are not using ActiveRecord, you can remove these lines.
begin
  ActiveRecord::Migration.maintain_test_schema!
rescue ActiveRecord::PendingMigrationError => e
  puts e.to_s.strip
  exit 1
end
RSpec.configure do |config|
  config.include SignInSupport #<Addition>
  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

  # If you're not using ActiveRecord, or you'd prefer not to run each of your
  # examples within a transaction, remove the following line or assign false
  # instead of true.
  config.use_transactional_fixtures = true

  # You can uncomment this line to turn off ActiveRecord support entirely.
  # config.use_active_record = false

  # RSpec Rails can automatically mix in different behaviours to your tests
  # based on their file location, for example enabling you to call `get` and
  # `post` in specs under `spec/controllers`.
  #
  # You can disable this behaviour by removing the line below, and instead
  # explicitly tag your specs with their type, e.g.:
  #
  #     RSpec.describe UsersController, type: :controller do
  #       # ...
  #     end
  #
  # The different available types are documented in the features, such as in
  # https://relishapp.com/rspec/rspec-rails/docs
  config.infer_spec_type_from_file_location!

  # Filter lines from Rails gems in backtraces.
  config.filter_rails_from_backtrace!
  # arbitrary gems may also be filtered via:
  # config.filter_gems_from_backtrace("gem name")
end

The description added this time is on the 23rd line 「Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }And "config" on line 28.include Sign In Support ". One description is for setting to read files under spec/support /. The two descriptions are for reading spec/support/sign_in_support.rb, which will be created later.

② Create your own support directory.

③ Create a sign_in_support.rb file under the support directory.

sign_in_support.rb


module SignInSupport
  def sign_in(user)
    visit new_user_session_path
    fill_in 'mail address', with: user.email
    fill_in 'password', with: user.password
    find('input[name="commit"]').click
    expect(current_path).to eq tweets_path
  end
end

This allows you to use "sign_in" in your test code.

sign_in_support.rb


require 'rails_helper'

RSpec.describe 'Tweet posting', type: :system do
  before do
    @user = FactoryBot.create(:user)
    @tweet = FactoryBot.create(:tweet)
  end
  context 'When you can post a tweet'do
    it 'Logged-in users can post new' do
      #log in
      sign_in(@user)
    #(abridgement)
    end
  end
  context 'When you can't post a tweet'do
    it 'You cannot move to the top page unless you are logged in' do
    #(abridgement)
    end
  end
end

Recommended Posts

How to use "sign_in" in integration test (RSpec)
How to use Lombok in Spring
How to use InjectorHolder in OpenAM
How to use classes in Java?
[RSpec] How to write test code
Multilingual Locale in Java How to use Locale
How to use custom helpers in rails
How to use named volume in docker-compose.yml
How to use Docker in VSCode DevContainer
How to use MySQL in Rails tutorial
How to use environment variables in RubyOnRails
Understand in 5 minutes !! How to use Docker
How to write an RSpec controller test
How to use credentials.yml.enc introduced in Rails 5.2
How to use ExpandableListView in Android Studio
How to use Map
How to use rbenv
Introduction to RSpec 1. Test, RSpec
How to use letter_opener_web
How to use with_option
How to use fields_for
[Rails] How to use select boxes in Ransack
How to use map
How to use collection_select
JUnit 5: How to write test cases in enum
How to use Twitter4J
How to use active_hash! !!
How to use MapStruct
How to use hidden_field_tag
How to use TreeSet
[How to use label]
How to use identity
How to use hashes
How to use JUnit 5
How to use JQuery in js.erb of Rails6
How to use Dozer.mapper
How to use Gradle
[Rails] How to use PostgreSQL in Vagrant environment
How to use org.immutables
How to use java.util.stream.Collector
How to use VisualVM
How to use Map
How to resolve errors that occur in the "Ruby on Rails" integration test
[Ruby] How to use standard output in conditional branching
How to use Z3 library in Scala with Eclipse
Understand how to use Swift's JSON Decoder in 3 minutes
How to use CommandLineRunner in Spring Batch of Spring Boot
How to use JDD library in Scala with Eclipse
How to test file upload screen in Spring + Selenium
How to use In-Memory Job repository in Spring Batch
[RSpec] How to test error messages set by Shoulda-Matchers
Notes on how to use regular expressions in Java
[Java] How to use Map
How to use Chain API
[Java] How to use Map
How to use Priority Queuing
[Rails] How to use enum
How to use java Optional
How to use JUnit (beginner)
[Rails] How to use enum
How to use @Builder (Lombok)