public
Rubygem
Description: Makes tests easy on the fingers and the eyes

Example macros

This is a repository of user contributed shoulda macros. Feel free to add your own to this list – either linking to a blog post (highly encouraged), or showing the code inline.

Paperclip


class UserTest < Test::Unit::TestCase
  should_have_attached_file :avatar
end

See this GIANT ROBOTS post for the full code.

acts_as_paranoid


class UserTest < Test::Unit::TestCase
  should_act_as_paranoid
end

class Test::Unit::TestCase
  def self.should_act_as_paranoid
    klass = model_class

    context "A #{klass.name}" do
      should "be paranoid (it will not be deleted from the database)" do
        klass.paranoid?
      end

      should "not have a value for deleted_at" do
        assert object = klass.find(:first)
        assert_nil object.deleted_at
      end

      context "when destroyed" do
        setup do
          assert object = klass.find(:first)
          @deleted_id = object.id
          object.destroy
        end

        should "not be found" do
          assert_raise(ActiveRecord::RecordNotFound) { klass.find(@deleted_id) }
        end

        should "still exist in the database" do
          deleted_object = klass.find_with_deleted(@deleted_id)
          assert_not_nil deleted_object.deleted_at
        end
      end
    end
  end
end

RESTful AuthSystem (should_require_login)

See MetaSkills post for the full code.


class UsersControllerTest < ActionController::TestCase

  should_require_login :edit, :update, :etc

end

module AuthSystem
  module TestHelper

    def self.included(receiver)
      receiver.extend ClassMethods
      receiver.send :include, InstanceMethods
    end

    module ClassMethods

      def should_require_login(*actions)
        actions.each do |action|
          should "Require login for '#{action}' action" do
            get(action)
            assert_redirected_to(login_url)
          end
        end
      end

    end

    module InstanceMethods

      def login_as(user)
        if u = users(user)
          @request.session[:user_id] = u.id
        end
      end

    end

  end
end

Testing Controller response formats (should_respond_as)


class Test::Unit::TestCase

  # setup do
  #   get :recent, :type => 'atom'
  # end
  #
  # should_respond_as 'application/atom+xml'
  #
  def self.should_respond_as(format)
    should "respond in \'#{format}\'" do
      assert_match /\A#{Regexp.escape(format)}/, @response.headers['type']
    end
  end
end

Acts As Ferret, Acts As Taggable On Steroids, Acts As List

Some basic macros for acts_as_ferret, acts_as_taggable_on_steroids, and acts_as_list can be found at SoyUnPerdedor – Shoulda Macros for Common Plugins

Last edited by mileszs, about 1 month ago
Versions: