Module: Shoulda

Defined in:
lib/shoulda/context/assertions.rb,
lib/shoulda/context/context.rb,
lib/shoulda/context/version.rb,
lib/shoulda/context/autoload_macros.rb,
lib/shoulda/context/test_framework_detection.rb

Overview

:nodoc:

Defined Under Namespace

Modules: Context

Class Method Summary collapse

Class Method Details

.autoload_macros(root, *dirs) ⇒ Object

Call autoload_macros when you want to load test macros automatically in a non-Rails project (it's done automatically for Rails projects). You don't need to specify ROOT/test/shoulda_macros explicitly. Your custom macros are loaded automatically when you call autoload_macros.

The first argument is the path to you application's root directory. All following arguments are directories relative to your root, which contain shoulda_macros subdirectories. These directories support the same kinds of globs as the Dir class.

Basic usage (from a test_helper): Shoulda.autoload_macros(File.dirname(__FILE__) + '/..') will load everything in

  • your_app/test/shoulda_macros

To load vendored macros as well: Shoulda.autoload_macros(APP_ROOT, 'vendor/*') will load everything in

  • APP_ROOT/vendor/*/shoulda_macros

  • APP_ROOT/test/shoulda_macros

To load macros in an app with a vendor directory laid out like Rails': Shoulda.autoload_macros(APP_ROOT, 'vendor/plugins,gems/*') or Shoulda.autoload_macros(APP_ROOT, 'vendor/plugins/*', 'vendor/gems/*') will load everything in

  • APP_ROOT/vendor/plugins/*/shoulda_macros

  • APP_ROOT/vendor/gems/*/shoulda_macros

  • APP_ROOT/test/shoulda_macros

If you prefer to stick testing dependencies away from your production dependencies: Shoulda.autoload_macros(APP_ROOT, 'vendor/*', 'test/vendor/*') will load everything in

  • APP_ROOT/vendor/*/shoulda_macros

  • APP_ROOT/test/vendor/*/shoulda_macros

  • APP_ROOT/test/shoulda_macros


38
39
40
41
42
43
44
45
# File 'lib/shoulda/context/autoload_macros.rb', line 38

def self.autoload_macros(root, *dirs)
  dirs << File.join('test')
  complete_dirs = dirs.map{|d| File.join(root, d, 'shoulda_macros')}
  all_files     = complete_dirs.inject([]){ |files, dir| files + Dir[File.join(dir, '*.rb')] }
  all_files.each do |file|
    require file
  end
end