Skip to content

Instantly share code, notes, and snippets.

@jesse-spevack
Forked from ryanflach/rails_setup.md
Last active January 24, 2017 16:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jesse-spevack/8ad8151438a351ee7a6670650c99aa13 to your computer and use it in GitHub Desktop.
Save jesse-spevack/8ad8151438a351ee7a6670650c99aa13 to your computer and use it in GitHub Desktop.
Common setup for a new Rails project
  1. rails new <project_name> -d postgresql --skip-turbolinks --skip-spring -T
  • -d postgresql sets up the project to use PostgreSQL
  • --skip-turbolinks & --skip-spring creates a project that does not use turbolinks or spring
  • -T skips the creation of the test directory and use of Test::Unit
  • Optional: --api will create a stripped-down Rails application with a smaller set of middleware. It will also configure the generators to skip the views/helpers/assets and change the parent for ApplicationController from ActionController::Base to ActionController::API
  1. In the Gemfile:
  • Available to all environments:
    • gem 'figaro' - store environment variables securely across your app (docs)
    • Uncomment gem 'bcrypt', '~> 3.1.7' if you will be hosting your own user accounts with passwords (docs)
  • Inside of group :test:
    • gem 'rspec-rails' - user rspec in place of minitest (docs)
    • gem 'capybara' - act as a user navigating your site in tests (docs)
    • gem 'launchy' - for running save_and_open_page (docs)
    • gem 'shoulda-matchers' - easier model testing (docs)
    • gem 'database_cleaner' - clean your database between tests (docs)
    • gem 'factory_girl_rails' - easily generate database objects without repetitive code in tests (docs)
    • gem 'simplecov', require: false - generate reports on your test coverage (docs)
  • inside of group :production:
    • gem 'rails_12factor', group: :production - If publishing on Heroku (docs)
  1. Bundle and install (bundle exec or rails g) where required, create additional required files
  • bundle
  • rails g rspec:install
  • bundle exec figaro install
  • mkdir spec/support
  • touch spec/support/factory_girl.rb
  • touch spec/support/factories.rb
  • touch spec/support/database_cleaner.rb
  1. Add config data
  • In spec/rails_helper.rb
    require 'capybara/rails'
    
    Shoulda::Matchers.configure do |config|
      config.integrate do |with|
        with.test_framework :rspec
        with.library :rails
      end
    end
    
    • under RSpec.configure do |config| add
    config.formatter = :documentation
    
    • Uncomment Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
    • Change config.use_transactional_fixtures = true to ... = false
  • In spec/support/factory_girl.rb
    RSpec.configure do |config|
      config.include FactoryGirl::Syntax::Methods
    end
    
  • In spec/support/factories.rb
    FactoryGirl.define do
      <factories for each model go here>
    end
    
    
  • In spec/spec_helper.rb
    • Note: this must appear at the very top of this file
    require 'simplecov'
    SimpleCov.start 'rails'
    
  • In spec/support/database_cleaner.rb
    RSpec.configure do |config|
    
      config.before(:suite) do
        DatabaseCleaner.clean_with(:truncation)
      end
    
      config.before(:each) do
        DatabaseCleaner.strategy = :transaction
      end
    
      config.before(:each, :js => true) do
        DatabaseCleaner.strategy = :truncation
      end
    
      config.before(:each) do
        DatabaseCleaner.start
      end
    
      config.after(:each) do
        DatabaseCleaner.clean
      end
    
    end
    
  • In .gitignore
    # Ignore SimpleCov files
    coverage
    
    
  1. (Optional) If working with an external API:
  • In Gemfile
    • Available to all environments
      • gem 'faraday' - for making http requests (docs)
    • under group :test
      • gem 'vcr' - for stubbing (docs)
      • gem 'webmock' - for mocking (used by VCR) (docs)
  • bundle
  • In spec/rails_helper.rb
    require 'vcr'
    
    VCR.configure do |config|
      config.cassette_library_dir = "spec/vcr_cassettes"
      config.hook_into :webmock
    end
    
  • In .gitignore
    # Ignore vcr cassettes
    /spec/vcr_cassettes
    
    
  1. (Optional) If you will be using feature tests that utilize JavaScript:
  • In Gemfile
    • under group :test
    gem 'selenium-webdriver`
    
    note: Firefox 46 is required for Selenium
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment