Logo: Relish

  1. Sign up
  2. Sign in

Project: RSpec Rails 2.6

Start from scratch

Install Rails-3

$ gem install rails -v "~> 3.0.0"

Generate an app

$ rails new example
$ cd example

Add rspec-rails to the Gemfile

$ echo 'gem "rspec-rails", :group => [:development, :test]' >> Gemfile

Install the bundle

$ bundle install

Bootstrap RSpec

$ rails generate rspec:install

Generate a scaffold

$ rails generate scaffold Widgets name:string

This generates files in the app and spec directories. The files in the
app directory are generated by Rails, and Rails delegates the generation of
the files in the spec directory to RSpec.

Run migrations

$ rake db:migrate && rake db:test:prepare

Run RSpec

$ rake spec


$ rspec spec --format documentation

If all went well, you should see output ending with:

29 examples, 0 failures, 2 pending

This output also includes the following controller spec:

  GET index
    assigns all widgets as @widgets
  GET show
    assigns the requested widget as @widget
  GET new
    assigns a new widget as @widget
  GET edit
    assigns the requested widget as @widget
  POST create
    with valid params
      creates a new Widget
      assigns a newly created widget as @widget
      redirects to the created widget
    with invalid params
      assigns a newly created but unsaved widget as @widget
      re-renders the 'new' template
  PUT update
    with valid params
      updates the requested widget
      assigns the requested widget as @widget
      redirects to the widget
    with invalid params
      assigns the widget as @widget
      re-renders the 'edit' template
  DELETE destroy
    destroys the requested widget
    redirects to the widgets list

Output like this can help to quickly gain a high level understanding of how an
object behaves. It also exposes which cases have been specified and which have
not. Note the balance between the examples for the create and update
actions. If the redirects to the widget example was missing from one or the
other, it would be easy to spot.

Take a look at the generated spec/controllers/widgets_controller_spec.rb to
get a sense of how to organize your specs to generate output like this.

Last published 3 months ago by dchelimsky.