Skip to content

A starter Middleman 4 app / site stocked with Bootstrap 4 beta, RSpec and other goodies. Download it and use it as a quick standup to kick off your own middleman project

License

Notifications You must be signed in to change notification settings

jonathanroehm/middleman-rspec-bootstrap4

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Middleman Rspec Bootstrap4

version 1.1 (stable & working beautifully)

A convenient starter app for Middleman 4 that comes preloaded with RSpec, Bootstrap4 Beta and a host of other goodies

A basic "starting point" middleman app that is tested through RSpec with some additional handy features to help you get up and running quickly.

I use this app as a starting point for new projects since it has a lot of convenient things already in place... CoffeeScript namespacing, example feature specs, RSpec and Capybara configurations, etc.

Note: Inspiration and starting points for getting my own initial Middleman apps up and running is thanks to simonrice's middleman-rspec. Tons of appreciation to simonrice.

TLDR;

A detailed walkthrough is down below this TLDR... but if you're out of time and just need to get up and running quickly... go through this process. By the way, this assumes you have ruby, homebrew and Google Chrome setup and in place on your machine. If you don't have those, get them in place first.

Clone the repo (if copying and pasting the commands below, don't copy the $ sign into your terminal):

Install Middleman $ gem install middleman From within your root project folder, eg: /Users/jonathanroehm/projects/ $ git clone https://github.com/jonathanroehm/middleman-rspec-bootstrap4.git From within your app folder on terminal, e.g: /Users/jonathanroehm/projects/middleman-rspec-bootstrap4/ bundle the gems $ bundle exec bundle Install ChromeDriver $ homebrew install chromedriver Run the pre-loaded specs: $ bundle exec rspec 

Run the app (browsable on your machine at http://localhost:4567):

$ middleman server 

Build your files:

$ middleman build 

Everything else

The general toolset:

  1. HAML
  2. CoffeeScript
  3. RSpec & Capybara
  4. I18n
  5. Bootstrap 4 (Currently v4.0.0 beta)
  6. FontAwesome

If you stumbled here because you were looking for help in getting Middleman setup with RSpec, this should be a useful app for you. Follow the docs and you should be up and running in no time. For the uninitiated, the '$' symbol is just a visual cue that you should type in the following code in terminal. Don't actually copy in the '$' sign.

Getting Started

This'll walk you through the basic setup 'for your info.'

Install middleman

If you do not have middleman installed locally, run the command below.

$ gem install middleman 

Cloning repo

After you clone this repo locally, be sure to run bundle install. Basic setup once in your normal projects root folder, clone the app:

$ git clone https://github.com/jonathanroehm/middleman-rspec-bootstrap4.git $ bundle exec bundle 

Working in middleman

All files should go into the source directories. Example:

  1. HAML files: my_app/source/index.html.haml
  2. JavaScript: my_app/source/javascripts/application.js.coffee
  3. Images: my_app/source/images/image.jpg

Starting middleman

To see live updates in your browser, at the root of the project in terminal run the command below and follow the displayed instructions

$ middleman server 

To build the html files, run:

They'll output to a build folder, e.g.: my_app/build/index.html

$ middleman build 

All of the assets will be created in a build folder.

Setting up a convenient config.rb in my_app/config.rb file

See individual walkthrough and then the full config.rb file below:

Getting I18n and relative files and links setup:

### # Page options, layouts, aliases and proxies ### activate :i18n activate :relative_assets set :relative_links, true set :relative_assets, true

Make life easier with livereload and sprockets

# General configuration configure :development do activate :livereload activate :sprockets do |c| c.expose_middleman_helpers = true end if defined? RailsAssets RailsAssets.load_paths.each do |path| sprockets.append_path path end end end

Build only a single minified application.js and application.css instead of every source file (cut down on those http requests and speed up your site):

# Build-specific configuration configure :build do activate :sprockets do |c| c.expose_middleman_helpers = true end # Minify CSS on build activate :minify_css # Don't pump out source CSS files ignore %r{stylesheets/(?!application\.css).*$} # Minify Javascript on build activate :minify_javascript # Don't pump out source JS files ignore %r{javascripts/(?!application\.js).*$} end

All together, config.rb:

# Activate and configure extensions # https://middlemanapp.com/advanced/configuration/#configuring-extensions ignore 'README.md' # Layouts # https://middlemanapp.com/basics/layouts/ ### # Page options, layouts, aliases and proxies ### activate :i18n activate :relative_assets set :relative_links, true set :relative_assets, true # Per-page layout changes: # # With no layout page '/*.xml', layout: false page '/*.json', layout: false page '/*.txt', layout: false # General configuration configure :development do activate :livereload activate :sprockets do |c| c.expose_middleman_helpers = true end if defined? RailsAssets RailsAssets.load_paths.each do |path| sprockets.append_path path end end end # Build-specific configuration configure :build do activate :sprockets do |c| c.expose_middleman_helpers = true end # Minify CSS on build activate :minify_css # Don't pump out source CSS files ignore %r{stylesheets/(?!application\.css).*$} # Minify Javascript on build activate :minify_javascript # Don't pump out source JS files ignore %r{javascripts/(?!application\.js).*$} end

Gems

Getting rspec and everything else in place:

The useful Middleman gems:

# Middleman Gems gem 'middleman', '>= 4.0.0' gem 'middleman-livereload', '~> 3.4.3' gem 'middleman-compass', '>= 4.0.0' gem 'middleman-sprockets'

Secondary tools: Bootstrap, Font Awesome, JQuery, HAML

gem 'haml' gem 'bootstrap', '~> 4.0.0.beta' source 'https://rails-assets.org' do gem 'rails-assets-jquery' end

Getting the testing gems in place:

group :test do gem 'selenium-webdriver' gem 'chromedriver-helper' gem 'rspec' gem 'capybara' end

All together, my_app/Gemfile

# If you do not have OpenSSL installed, change # the following line to use 'http://' source 'https://rubygems.org' # Middleman Gems gem 'middleman', '>= 4.0.0' gem 'middleman-livereload', '~> 3.4.3' gem 'middleman-compass', '>= 4.0.0' gem 'middleman-sprockets' gem 'haml' gem 'bootstrap', '~> 4.0.0.beta' source 'https://rails-assets.org' do gem 'rails-assets-jquery' end group :test do gem 'selenium-webdriver' gem 'chromedriver-helper' gem 'rspec' gem 'capybara' end # For faster file watcher updates on Windows: gem 'wdm', '~> 0.1.0', platforms: [:mswin, :mingw] # Windows does not come with time zone data gem 'tzinfo-data', platforms: [:mswin, :mingw, :jruby]

Configuring RSpec

  1. Create a 'spec' folder in your app's root folder: my_app/spec/
  2. Add spec_helper.rb; so within my_app/spec/spec_helper.rb

Within my_app/spec/spec_helper.rb

Require these:

require 'rspec' require 'middleman' require 'capybara/rspec' require 'middleman-core' require 'middleman-core/rack' require 'middleman-core/load_paths' require 'middleman-livereload' require 'middleman-sprockets' require 'middleman-compass'

Add the ability to locate supporting spec files like shared_examples:

# Utilize spec support files like shared_examples Dir["./spec/support/**/**/*.rb"].sort.each { |f| require f}

Setup your feature spec's browser:

# Capybara & Selenium prefered_browser = :chrome Capybara.default_driver = :selenium Capybara.register_driver :selenium do |app| # Use Chrome (Firefox has a host of issues) Capybara::Selenium::Driver.new(app, browser: prefered_browser) end

Add iPhone driver for iPhone feature tests

# Use an iPhone user agent Capybara.register_driver :iphone do |app| Capybara::RackTest::Driver.new(app, browser: prefered_browser, headers: { 'HTTP_USER_AGENT' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A5297c Safari/602.1' }) end

Add 'by' and 'and_by' to your specs (to help speed up tare down and rebuilds associated with each 'it' statement):

# Allow 'by' 'and_by' in specs def by(message) if block_given? yield else pending message end end alias and_by by

And everything else, all together:

require 'rspec' require 'middleman' require 'capybara/rspec' require 'middleman-core' require 'middleman-core/rack' require 'middleman-core/load_paths' require 'middleman-livereload' require 'middleman-sprockets' require 'middleman-compass' # Utilize spec support files like shared_examples Dir["./spec/support/**/**/*.rb"].sort.each { |f| require f} # Capybara & Selenium prefered_browser = :chrome Capybara.default_driver = :selenium Capybara.register_driver :selenium do |app| # Use Chrome (Firefox has a host of issues) Capybara::Selenium::Driver.new(app, browser: prefered_browser) end # Use an iPhone user agent Capybara.register_driver :iphone do |app| Capybara::RackTest::Driver.new(app, browser: prefered_browser, headers: { 'HTTP_USER_AGENT' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A5297c Safari/602.1' }) end RSpec.configure do |config| config.include Capybara::DSL end # Configure middleman Middleman.setup_load_paths middleman_app = ::Middleman::Application.new Capybara.app = ::Middleman::Rack.new(middleman_app).to_app do set :root, File.expand_path(File.join(File.dirname(__FILE__), '..')) set :environment, :development set :show_exceptions, false end # Allow 'by' 'and_by' in specs def by(message) if block_given? yield else pending message end end alias and_by by

Running RSpec

This app uses Google Chrome for feature specs. You'll need to have the Chrome browser installed and in its usual path for everything to run easily.

To run RSpec:

bundle exec rspec 

RSpec files

To add a new spec, go to my_app/spec/features/ and add a new feature spec and add _spec.rb to the filename, e.g.:

my_app/spec/features/index_spec.rb 

To get a barebones feature spec up and running, in my_app/spec/features/index_spec.rb

require 'spec_helper' describe 'the index page', type: :feature, js: true do before { visit '/index.html' } it 'is the index page' do by 'being the index page' do expect(current_path).to eq '/index.html' end and_by 'having the index page heading' do expect(page).to have_text I18n.t('index.headings.page') end end end

Then run this spec specifically:

$ bundle exec rspec spec/features/index_spec.rb 

You can also run specific lines in rspec (e.g.: if you run a test and get a specific error on a specific line, you don't have to re-run the full test over again)... so to run line 32, for example:

$ bundle exec rspec spec/features/index_spec.rb:32 

And, of course, if you want to run your entire test suite:

$ bundle exec rspec 

This is what a simple rspec output looks like:

== Locales: en (Default en) == LiveReload accepting connections from ws://10.0.0.182:35729 . Finished in 7.68 seconds (files took 5.03 seconds to load) 1 example, 0 failures 

About

A starter Middleman 4 app / site stocked with Bootstrap 4 beta, RSpec and other goodies. Download it and use it as a quick standup to kick off your own middleman project

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published