Configuration for
- RSpec
- shoulda matchers
- capybara
- factorybot
- database_cleaner
- omniauth-facebook
- omniauth-twitter
- selenium with headless chrome
# support/omniauth_helpers.rb | |
module OmniauthHelpers | |
def omniauth_facebook | |
OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new( | |
{ | |
provider: 'facebook', | |
uid: '12345', | |
info: { | |
name: 'TestUser', | |
email: 'test@example.com' | |
}, | |
credentials: { | |
token: 'qwertyui' | |
} | |
} | |
) | |
end | |
def omniauth_twitter | |
OmniAuth.config.mock_auth[:twitter] = OmniAuth::AuthHash.new( | |
{ | |
provider: 'twitter', | |
uid: '123456', | |
info: { | |
email: 'foo@foo.com' | |
} | |
} | |
) | |
end | |
end |
require 'capybara/rspec' | |
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } | |
RSpec.configure do |config| | |
config.use_transactional_fixtures = false | |
config.include FactoryBot::Syntax::Methods | |
config.before(:suite) do | |
if config.use_transactional_fixtures? | |
raise(<<-MSG) | |
Delete line `config.use_transactional_fixtures = true` from rails_helper.rb | |
(or set it to false) to prevent uncommitted transactions being used in | |
JavaScript-dependent specs. | |
During testing, the app-under-test that the browser driver connects to | |
uses a different database connection to the database connection used by | |
the spec. The app's database connection would not be able to access | |
uncommitted transaction data setup over the spec's database connection. | |
MSG | |
end | |
DatabaseCleaner.clean_with(:truncation, pre_count: true, cache_tables: true) | |
FactoryBot.lint | |
end | |
config.before(:each) do | |
DatabaseCleaner.strategy = :transaction | |
end | |
config.before(:each, type: :feature) do | |
driver_shares_db_connection_with_specs = Capybara.current_driver == :rack_test | |
unless driver_shares_db_connection_with_specs | |
DatabaseCleaner.strategy = :truncation | |
end | |
end | |
config.before(:each) do | |
DatabaseCleaner.start | |
end | |
config.append_after(:each) do | |
DatabaseCleaner.clean | |
end | |
config.include Devise::Test::ControllerHelpers, type: :controller | |
config.include ControllerHelpers, :type => :controller | |
config.include OmniauthHelpers | |
OmniAuth.config.test_mode = true | |
config.before(:each, type: :system) do | |
driven_by :rack_test | |
end | |
config.before(:each, type: :system, js: true) do | |
driven_by :selenium_chrome_headless | |
end | |
end | |
Capybara.register_driver :selenium_chrome_headless do |app| | |
options = Selenium::WebDriver::Chrome::Options.new( | |
args: %w[headless disable-gpu --window-size=1400x1400] | |
) | |
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options) | |
end | |
Capybara.default_driver = :selenium_chrome_headless | |
Shoulda::Matchers.configure do |config| | |
config.integrate do |with| | |
with.test_framework :rspec | |
with.library :rails | |
end | |
end |
# .rspec | |
--require spec_helper | |
--color | |
--format documentation |