Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Rails plugin providing Test::Unit macros for controller and model testing
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
test
MIT-LICENSE
README
init.rb
install.rb

README

= TesterXtreme

The Tester Xtreme plugin is a way to distill common testing patterns into easy-to-use macros that
are added as class methods to your test cases.  There are currently macros for both unit (ActiveRecord 
model) and functional (ActionController controllers) tests.

== Unit Test Macros

=== Validation Tests

Each of the validation testing macros checks to make sure there is an appropriate validation method 
defined in the model for each attribute specified.

*should_require*

Ensures that +validates_presence_of+ was used.

*should_require_numeric*

Ensures that +validates_numericality_of+ was used.

*should_require_unique*

Ensures that +validates_uniqueness_of+ was used.

*should_protect*

Ensures that +attr_protected+ was used for this attribute.

*Usage*:

  class UserTest < ActiveSupport::TestCase
    should_require :first_name, :last_name
    should_require_unique :username
    should_require_numeric :friends_count
    should_protect :hashed_password
  end

=== Association Tests

Each of the association testing macros checks to make sure the correct associations were defined on 
this model.  The names map directly to the association definitions:

*should_have_many*

Ensures that +has_many+ was used.

*should_belong_to*

Ensures that +belongs_to+ was used.

*should_have_one*

Ensures that +has_one+ was used.

*should_have_and_belong_to_many*

Ensures that +has_and_belongs_to_many+ was used.

*Usage*:

  class UserTest < ActiveSupport::TestCase
    should_have_many :friends
    should_belong_to :organization
    should_have_one :credit_card
    should_have_and_belong_to_many :categories
  end

== Functional Test Macros

Each of the functional testing macros require that you first request an action on the controller.  To
accomplish this, the 4 standard actions are implemented as class methods for the test:

* get
* post
* put
* delete

In addition to simple requests, you can also specify parameters and initial states:

  get(:show){ User.expects(:find).returns(mocked_user) }.with(:id => 1)
  post(:create).with(:username => 'foobar')

From here, you can use the macros to define certain expectations on the controller:

*should_assign*

Asserts that the specified variable is set as an instance variable.

*should_not_assign*

Asserts that the specified variable is *not* set as an instance variable.

*should_use_filter*

Asserts that the designated filter method is run.

*should_not_use_filter*

Asserts that the designated filter method is *not* run.

*should_render*

Asserts that the response for the action is successful and that the specified template is rendered.

*should_set_flash*

Asserts that the specified key and value was set in the flash collection.

*should_set_session*

Asserts that the specified variable was set in session.

*should_redirect_to*

Asserts that the response was a redirect and that the action redirects to the specified route.

*Usage*:

  class UsersController < ActionController::TestCase
    get(:new).should_render(:new)
    post(:create).with(:username => 'foo').should_redirect_to(:new_user_url)
    delete(:destroy).should_set_flash(:notice, 'You must log in')
    get(:show).with(:id => 1).should_use_filter(:check_for_current_user)
    get(:show).with({:id => 1}, {:user_id => 3}).should_assign(:current_user)
  end

= Credits

Copyright (c) 2007 Ben Scofield, released under the MIT license
Something went wrong with that request. Please try again.