Tag: rspec

Testing HTTP basic authentication with RSpec 2

Posted by – July 6, 2010

Here's how I test my admin controllers that use HTTP basic authentication using RSpec 2:

before(:each) do
    user = 'test'
    pw = 'test_pw'
    request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials(user,pw)
end

Actually, that's how I did it when I first tested things, but I've since put it in its own module under spec/support/auth_helper:

module AuthHelper
  # do admin login
  def admin_login
    user = 'test'
    pw = 'test_pw'
    request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials(user,pw)
  end  
end

and now my controller spec looks like this:

describe Admin::LocationsController do
 
  include AuthHelper
 
  before(:each) do
    admin_login
  end
 
  describe "GET index" do
    it "assigns all locations as @locations" do
      loc = Factory.create(:location)
      get :index
      assigns(:locations).should eq([loc])
    end
  end
 
  describe "GET show" do
    it "assigns the requested location as @location" do
      loc = Factory.create(:location)
      get :show, :id => loc.id
      assigns(:location).should === loc
    end
  end  
 
end

That "Factory" line comes from my use of factory_girl rather than fixtures.

Rails 3, RSpec, Mongoid and Database Cleaner

Posted by – July 5, 2010

After wrestling with various combinations of cleaning out my database between tests, this is what I'm using on a new Rails 3 application that uses Mongoid, RSpec 2, and Database Cleaner. I have one table (neighborhoods) which is populated using rake db:seed, so I'm excluding that from the cleanup.

Put this into your spec/spec_helper.rb:

require 'database_cleaner'
 
RSpec.configure do |config|
  config.mock_with :rspec
 
  config.before(:each) do
    DatabaseCleaner.orm = "mongoid" 
    DatabaseCleaner.strategy = :truncation, {:except => %w[ neighborhoods ]}
    DatabaseCleaner.clean
  end
end

UPDATE: This isn't working for me now. Apparently the config.before(:each) part isn't being called in the versions of rspec (2.0.0.beta.21), cucumber (0.8.5), and cucumber-rails (0.3.2) that I'm using now. I'm now using the approach by Kevin Faustino here.