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.
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 from Swipely, Inc..