Skip to content

Instantly share code, notes, and snippets.

@dtinianow
Forked from ryanflach/rails_setup.md
Created October 3, 2016 19:37
Show Gist options
  • Save dtinianow/57c3777ff37b535394516ba9ff177e17 to your computer and use it in GitHub Desktop.
Save dtinianow/57c3777ff37b535394516ba9ff177e17 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
  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
  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
    
    • Uncomment Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
  • In spec/support/factory_girl.rb
    RSpec.configure do |config|
      config.include FactoryGirl::Syntax::Methods
      
      config.before(:suite) do
        begin
          DatabaseCleaner.start
          FactoryGirl.lint
        ensure
          DatabaseCleaner.clean
        end
      end
    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 'simplcov'
    SimpleCov.start 'rails'
    
  • 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
    
    

Note: If you are not using FactoryGirl, disregard the steps above for FactoryGirl and follow the instructions here for configuring DatabaseCleaner.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment