---
title: 'Shoulda 2.10: time for a little love for ActionController'
teaser:
tags: news,web,ruby,testing,open source,shoulda
author: Joe Ferris
published_on: 2009-03-04
---

![''](http://images.thoughtbot.com/ui/2009-3-3-heart.jpg)

Shoulda's ActiveRecord macros received some well-deserved attention in 2.9.0,
but what's Shoulda without a little extra sugar for your controller tests?

## RSpec ActionController matchers

Shoulda's much-loved ActiveRecord macros have been available to RSpec users for
a little while now, but RSpec controller specs have had little love from Shoulda
so far. Shoulda 2.10 ends this streak of injustice, so RSpec users can now
`respond_with` and route and `set_the_flash` until the cows come home. Behold!

```ruby
describe UsersController, "routes" do
  it { should route(:get, '/users/1').
                to(:action => 'show', :id => '1') }
end

describe UsersController, "on GET to show with a valid id" do
  subject { controller }

  before(:each) do
    get :show, :id => User.first.to_param
  end

  it { should assign_to(:user) }
  it { should respond_with(:success) }
  it { should not_set_the_flash) }
end
```

The upcoming RSpec 1.2 release will implicitly set the subject for controller
specs, so that subject line will no longer be necessary after that release.

For more examples of RSpec matchers, see the [Shoulda
docs](http://dev.thoughtbot.com/shoulda/)

## Block arguments

Several Shoulda macros expected strings that were evaluated as Ruby. Shoulda now
accepts a block argument for each of these macros, allowing you to keep your
Ruby in Ruby:

```ruby
# before
should_assign_to(:user, '@user')
should_redirect_to('user_url(@user)')
should_return_from_session(:user_id, '@user.id')

# after
should_assign_to(:user) { @user }
should_redirect_to("the user's profile") { user_url(@user) }
should_set_session(:user_id) { @user.id }
```

The string evals still live on for now, but you'll receive a deprecation warning
when using them. Also, it's worth noting that the old string evals referenced
instance variables from the controller, but the blocks respect instance
variables from your tests.

## Time to move on

In addition to deprecating string evals, some of our old, deprecated friends
have been removed entirely: should_be_restful and load_all_fixtures are gone for
good. Fair thee well, old friends!

Well, what are you waiting for? Time to install the gems:

    sudo gem install thoughtbot-shoulda -s http://gems.github.com

Visit our [Open Source page](https://thoughtbot.com/open-source) to learn more about our team's contributions.
