We use factory bot rails for creating factories which are model data. Faker to create fake data for factories. Shoulda matcher for matching the expectations. Database cleaner for proactively cleaning database active record.
group :test do
# Use system testing [https://guides.rubyonrails.org/testing.html#system-testing]
gem "capybara"
gem "selenium-webdriver"
gem "webdrivers"
gem 'factory_bot_rails'
gem 'faker'
gem 'shoulda-matchers'
gem 'database_cleaner-active_record'
end
Rails Helper
require 'rspec/rails'
require 'factory_bot_rails'
require 'database_cleaner/active_record'
# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.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.
begin
ActiveRecord::Migration.maintain_test_schema!
rescue ActiveRecord::PendingMigrationError => e
puts e.to_s.strip
exit 1
end
module ControllerMacros
def sign_me_in
before :each do
@request.env['devise.mapping'] = Devise.mappings[:user]
@current_user = FactoryBot.create(:user)
sign_in :user, @current_user
end
end
end
Shoulda::Matchers.configure do |config|
config.integrate do |with|
with.test_framework :rspec
with.library :rails
end
end
RSpec.configure do |config|
config.include FactoryBot::Syntax::Methods
config.extend ControllerMacros, type: :controller
config.include Devise::Test::ControllerHelpers, type: :controller
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
Rails.application.load_seed
end
end