Generating a new Rails app without Test::Unit
Let’s get started. Begin by starting a new Rails project in the directory of your choice.
1
rails new my_app -T
This will generate a new app without the Test::Unit
directories as usually would accompany a new Rails project
The Gemfile
The first step to installing Rspec with Rails is to have a look at the documentation, which states you install it in both the test and development group.
In your Gemfile, put the following to install rspec-rails, Capybara, and FactoryGirl.
1
2
3
4
5
6
7
8
9
10
11
12
13
source 'https://rubygems.org'
gem 'rails', '~> 3.2.11'
#...
group :test, :development do
gem "rspec-rails", "~> 2.0"
gem 'capybara', "~> 2.0.2"
gem "factory_girl_rails", "~> 4.0"
end
#...
To install these gems, run:
1
bundle
Install RSpec
To install rspec-rails
and tell Rails to use RSpec as the default testing framework instead of Test::Unit
, run:
1
rails generate rspec:install
Configure the generators
In config/application.rb
, add the following code between the ellipses (surrounding code provided for context)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
module MyApp
class Application < Rails::Application
#...
config.generators do |g|
g.test_framework :rspec,
fixtures: true,
view_specs: false,
helper_specs: false,
routing_specs: false,
controller_specs: true,
request_specs: true
g.fixture_replacement :factory_girl, dir: "spec/factories"
end
#...
end
end
This will ensure that when you run the Rails generators, (such as rails g controller home
) the appropriate spec files will be generated as well.
Using Capybara
To use Capybara in your feature specs, all you need to do is require it from spec/spec_helper.rb
(see line 5):
1
2
3
4
5
6
7
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rspec'
#...
As of Capybara 2.0, there is no configuration necessary to get access to the Capybara DSL (visit/page), given they are placed in the right location. See this page for (slightly) more information. When you generate new feature tests, place them in spec/features
to use Capybara DSL. Simple enough.
FactoryGirl Definitions
In addition to requiring Capybara, you will want to add an additional line to spec/spec_helper.rb
:
1
FactoryGirl.find_definitions
This ensures that the factories in spec/factories
will be detected correctly and you can begin to use them without any further configuration.