Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Simplifies plugin testing by creating an isolated Rails environment that simulates its usage in a real application
Ruby
tag: v0.0.2

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
generators
lib
CHANGELOG
MIT-LICENSE
README
Rakefile
init.rb

README

= plugin_test_helper

plugin_test_helper simplifies plugin testing by creating an isolated Rails
environment that simulates its usage in a real application.

== Resources

Wiki

* http://wiki.pluginaweek.org/Plugin_test_helper

Announcement

* http://www.pluginaweek.org/

Source

* http://svn.pluginaweek.org/trunk/plugins/test/plugin_test_helper

Development

* http://dev.pluginaweek.org/browser/trunk/plugins/test/plugin_test_helper

== Background

As described in http://www.pluginaweek.org/2006/11/24/plugin-tip-of-the-week-testing-your-plugins-the-right-way/,
plugins often need access to a full Rails environment, whether it be accessing a
database, simulating controller access, or something else.  Whatever it may be,
you still need to initialize a Rails environment in order to get your tests
working.

Traditionally, this has been done by just loading the application that the
plugin was added to.  This has many downfalls, the most important of which is
that loading the application can cause all sorts of things to change, making it
seem as though the plugin is having problems when it may be something else.  The
other downfall of this technique is that the plugin cannot be tested individually.
Instead, it must be part of a Rails application.

== Solution

The solution to this problem is to have the plugin create its own basic Rails
environment with the ability to override any part of it, be it the database
configuration, environment configuration, or adding models, controllers, helpers,
etc.

plugin_test_helper assumes a testing structure like so:

your_plugin/
your_plugin/test
your_plugin/test/app_root
your_plugin/test/app_root/app
your_plugin/test/app_root/config
your_plugin/test/app_root/db
etc.

The app_root directory is just like your run-of-the-mill Rails application.  It
can contain the same directories as your full application.

== How to use plugin_test_helper

plugin_test_helper creates stubs for testing a plugin, as described in http://www.pluginaweek.org/2006/11/24

The following generators are available:
* plugin_test_helper
* plugin_test_structure
* plugin_test_model
* plugin_test_controller
* plugin_test_migration

+NOTE+ that you +DO NOT+ need to generate the entire application structure.  All
that is required is that your test helper load plugin_test_helper.  If you do
not define a part of the test application (such as the environment
configurations or the database configuration), then it will use the existing
implementation in plugin_test_helper/generators/plugin_test_structure/templates.
+However+, you can override any of these files by simply defining them in your
plugin, using the same directory structure.

=== plugin_test_helper

Generates a test helper file that should be required by all unit/functional/integration
tests in your plugin.

Example:

  $ ruby script/generate plugin_test_helper acts_as_most_popular
        create  vendor/plugins/acts_as_most_popular/test/test_helper.rb
  Loaded suite script/generate
  Started
  
  Finished in 0.000439 seconds.
  
  0 tests, 0 assertions, 0 failures, 0 errors

=== plugin_test_structure

Generates the entire test application structure.  If you keep all files within
your plugin, then you will not need to depend on the plugin_test_helper plugin
when testing it.

Example:

  $ ruby script/generate plugin_test_structure acts_as_most_popular
        create  vendor/plugins/acts_as_most_popular/test/app_root
        create  vendor/plugins/acts_as_most_popular/test/app_root/vendor
        create  vendor/plugins/acts_as_most_popular/test/app_root/config
        create  vendor/plugins/acts_as_most_popular/test/app_root/app
        create  vendor/plugins/acts_as_most_popular/test/app_root/lib
        create  vendor/plugins/acts_as_most_popular/test/app_root/vendor/plugins
        create  vendor/plugins/acts_as_most_popular/test/app_root/vendor/plugins/plugin_proxy
        create  vendor/plugins/acts_as_most_popular/test/app_root/vendor/plugins/plugin_proxy/init.rb
        create  vendor/plugins/acts_as_most_popular/test/app_root/config/environments
        create  vendor/plugins/acts_as_most_popular/test/app_root/config/routes.rb
        create  vendor/plugins/acts_as_most_popular/test/app_root/config/boot.rb
        create  vendor/plugins/acts_as_most_popular/test/app_root/config/environment.rb
        create  vendor/plugins/acts_as_most_popular/test/app_root/config/database.yml
        create  vendor/plugins/acts_as_most_popular/test/app_root/config/environments/sqlite.rb
        create  vendor/plugins/acts_as_most_popular/test/app_root/config/environments/sqlite3.rb
        create  vendor/plugins/acts_as_most_popular/test/app_root/config/environments/mysql.rb
        create  vendor/plugins/acts_as_most_popular/test/app_root/config/environments/in_memory.rb
        create  vendor/plugins/acts_as_most_popular/test/app_root/config/environments/postgresql.rb
        create  vendor/plugins/acts_as_most_popular/test/app_root/app/controllers
        create  vendor/plugins/acts_as_most_popular/test/app_root/app/controllers/application.rb
  Loaded suite script/generate
  Started
  
  Finished in 0.000548 seconds.
  
  0 tests, 0 assertions, 0 failures, 0 errors

=== plugin_test_model

Generates a model within your plugin's test application.  This uses a similar
syntax to that of the Rails model generator.

Example:

  $ ruby script/generate plugin_test_model acts_as_most_popular Person
        create  vendor/plugins/acts_as_most_popular/test/app_root/app/models/
        create  vendor/plugins/acts_as_most_popular/test/app_root/test/fixtures/
        create  vendor/plugins/acts_as_most_popular/test/app_root/app/models/person.rb
        create  vendor/plugins/acts_as_most_popular/test/app_root/test/fixtures/people.yml
        create  vendor/plugins/acts_as_most_popular/test/app_root/db/migrate
        create  vendor/plugins/acts_as_most_popular/test/app_root/db/migrate/001_create_people.rb
  Loaded suite script/generate
  Started
  
  Finished in 0.000435 seconds.
  
  0 tests, 0 assertions, 0 failures, 0 errors

=== plugin_test_controller

Generates a controller within your plugin's test application.  This uses a similar
syntax to that of the Rails controller generator.

Example:

  $ ruby script/generate plugin_test_controller acts_as_most_popular Person
        create  vendor/plugins/acts_as_most_popular/test/app_root/app/controllers/
        create  vendor/plugins/acts_as_most_popular/test/app_root/app/views/person
        create  vendor/plugins/acts_as_most_popular/test/app_root/app/controllers/person_controller.rb
  Loaded suite script/generate
  Started
  
  Finished in 0.000432 seconds.
  
  0 tests, 0 assertions, 0 failures, 0 errors

=== plugin_test_migration

Generates a migration within your plugin's test application.  This uses a similar
syntax to that of the Rails migration generator.

Example:

  $ ruby script/generate plugin_test_migration acts_as_most_popular CreatePeople
        create  vendor/plugins/acts_as_most_popular/test/app_root/db/migrate
        create  vendor/plugins/acts_as_most_popular/test/app_root/db/migrate/001_create_people.rb
  Loaded suite script/generate
  Started
  
  Finished in 0.000443 seconds.
  
  0 tests, 0 assertions, 0 failures, 0 errors

== Dependencies

This plugin does not depend on any other plugins.

== Credits

Kudos to Mark Meves over at http://rationalexuberance.org/ for working on the
initial implementation of this plugin. His work has made testing our plugins so
much easier. Thanks Mark!
Something went wrong with that request. Please try again.