watchmaker

Extract test setup and factory instantiation into reusable objects.

MIT License

Downloads
22.6K
Stars
2
Committers
2

= Watchmaker

Extract test setup and factory instantiation into reusable objects.

== Motivation

Extract complex setup code for integration tests out into a central place; for example:

  • Share setup code between cucumber and test/unit by centralizing it.
  • Run this code in the console in development mode to seed your db with test data.

== Using

=== Define profiles

Specify car, garage and boat as a dependency for lots of things. Watchmaker will either use a watchmaker by that name to fulfill that dependency, or fall back to the factory if it doesn't exist.

Watchmaker.define :lots_of_things => [:car, :garage, :boat]

Specify a block with things to do do:

Watchmaker.define :two_garages do
  2.times do 
    Factory.create :garage
  end
end

Specify a factory as a dependency:

Watchmaker.define :garage, :factories => [:garage] do
  # Some other post-factory creation setup here.
end

Specify multiple factories as dependencies:

Watchmaker.define :garages, :factories => [:garage, :garage] do
  # Some other post-factory creation setup here.
end

Pass those objects in to the block:

Watchmaker.define :car_and_driver, :factories => [:garage, :car] do |garage, car|
  garage.cars << car
end

Sepcify another watchmaker as a dependency:

Watchmaker.define :car, :watchmakers => [:garage]

Specify a factory and a watchmaker as a dependency:

Watchmaker.define :car, :factories => [:car], :watchmakers => [:garage]

=== Manufacture objects

Build in-memory objects using the two garages profile.

Watchmaker.build :two_garages

Build persisted objects using the two garages profile.

Watchmaker.create :two_garages

==== Get your objects back

Watchmaker returns the objects created.

Watchmaker.create(:garage).first.class # Garage

== Inspiration for the name

William Paley's {Watchmaker Analogy and Argument}[http://en.wikipedia.org/wiki/Watchmaker_analogy#The_Watchmaker_argument].

== License

Watchmaker is Copyright © 2011 Christopher Meiklejohn. It is free software, and may be redistributed under the terms specified in the LICENSE file.

== About

The watchmaker gem was written by {Christopher Meiklejohn}[mailto:[email protected]] from {Swipely, Inc.}[http://www.swipely.com].