Update rails_helper

- Added sections and comments
- Add support for loading via canonical.rb
- Add FactoryBot syntax methods
- Disable SQL logging in test environment
This commit is contained in:
Justin Edmund 2025-02-10 05:14:33 -08:00
parent 56987ba119
commit 6dbe7bd7c4

View file

@ -1,56 +1,84 @@
# frozen_string_literal: true
# This file is copied to spec/ when you run 'rails generate rspec:install' # This file is copied to spec/ when you run 'rails generate rspec:install'
require 'spec_helper' require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test' ENV['RAILS_ENV'] ||= 'test'
require_relative '../config/environment' require_relative '../config/environment'
# Prevent database truncation if the environment is production # Prevent database truncation if the environment is production
abort("The Rails environment is running in production mode!") if Rails.env.production? abort('The Rails environment is running in production mode!') if Rails.env.production?
# Uncomment the line below in case you have `--require rails_helper` in the `.rspec` file
# that will avoid rails generators crashing because migrations haven't been run yet # Load Rails and RSpec Rails Rails is not loaded until after the environment is set.
# return unless Rails.env.test?
require 'rspec/rails' 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 # Additional Requires:
# 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 # Add any additional requires below this line. For example, if you need to load
# of increasing the boot-up time by auto-requiring all files in the support # custom libraries or support files that are not automatically required.
# directory. Alternatively, in the individual `*_spec.rb` files, manually # -----------------------------------------------------------------------------
# require only the support files necessary.
#
# Rails.root.glob('spec/support/**/*.rb').sort_by(&:to_s).each { |f| require f }
# Checks for pending migrations and applies them before tests are run. # -----------------------------------------------------------------------------
# If you are not using ActiveRecord, you can remove these lines. # Require Support Files:
#
# All files in the spec/support directory and its subdirectories (except those
# ending in _spec.rb) are automatically required here. This is useful for custom
# matchers, macros, and shared contexts.
# -----------------------------------------------------------------------------
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }
# -----------------------------------------------------------------------------
# Check for Pending Migrations:
#
# This will check for any pending migrations before tests are run.
# -----------------------------------------------------------------------------
begin begin
ActiveRecord::Migration.maintain_test_schema! ActiveRecord::Migration.maintain_test_schema!
rescue ActiveRecord::PendingMigrationError => e rescue ActiveRecord::PendingMigrationError => e
abort e.to_s.strip abort e.to_s.strip
end end
RSpec.configure do |config| RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures # Disable ActiveRecord logging during tests for a cleaner test output.
config.fixture_paths = [ ActiveRecord::Base.logger = nil if Rails.env.test?
Rails.root.join('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 # Shoulda Matchers:
# instead of true. #
config.use_transactional_fixtures = true # If you use shoulda-matchers, you can configure them here. (Make sure you have
# the shoulda-matchers gem installed and configured in your Gemfile.)
# -----------------------------------------------------------------------------
# require 'shoulda/matchers'
# Shoulda::Matchers.configure do |matcher_config|
# matcher_config.integrate do |with|
# with.test_framework :rspec
# with.library :rails
# end
# end
# Optionally, load fixtures automatically for tests that declare :fixture. # -----------------------------------------------------------------------------
config.global_fixtures = :all # FactoryBot Syntax Methods:
#
# This makes methods like create and build available without needing to prefix
# them with FactoryBot.
# -----------------------------------------------------------------------------
config.include FactoryBot::Syntax::Methods
# You can uncomment this line to turn off ActiveRecord support entirely. # -----------------------------------------------------------------------------
# config.use_active_record = false # Load canonical seed data for test environment:
#
# This ensures that your canonical CSV data is loaded before your tests run.
# -----------------------------------------------------------------------------
config.before(:suite) do
load Rails.root.join('db', 'seed', 'canonical.rb')
end
# Filter lines from Rails gems in backtraces. # -----------------------------------------------------------------------------
# Backtrace Filtering:
#
# Filter out lines from Rails gems in backtraces for clarity.
# -----------------------------------------------------------------------------
config.filter_rails_from_backtrace! config.filter_rails_from_backtrace!
# arbitrary gems may also be filtered via: # You can add additional filters here if needed:
# config.filter_gems_from_backtrace("gem name") # config.filter_gems_from_backtrace("gem name")
end end