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 or $ 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: WidgetsController 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.