plugin_test_helper
simplifies plugin testing by creating an isolated Rails environment that simulates its usage in a real application.
API
Bugs
Development
Testing
Source
-
git://github.com/pluginaweek/plugin_test_helper.git
Mailing List
Plugins often need to initialize a full Rails environment, whether it be for accessing a database or simulating controller access. Traditionally, this has been done by just loading the application that the plugin was added to. However, this can cause all sorts of environment variables to change, making it seem as though the plugin is having problems when it may be something else. It also means that the plugin cannot be tested individually.
plugin_test_helper
helps solve this problem by allowing plugins to create their 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. The following testing structure is assumed:
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.
To help generate the various parts of your test application, 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.
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
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/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/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_controller.rb Loaded suite script/generate Started Finished in 0.000548 seconds. 0 tests, 0 assertions, 0 failures, 0 errors
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
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
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
Generates a script for running an interactive console with your plugin’s test application.
Example:
$ ruby script/generate plugin_test_console acts_as_most_popular create vendor/plugins/acts_as_most_popular/test/app_root/../../script create vendor/plugins/acts_as_most_popular/test/app_root/../../script/console Loaded suite script/generate Started Finished in 0.000267 seconds. 0 tests, 0 assertions, 0 failures, 0 errors
Rails 2.3 or later
-
Mark Meves for the initial implementation