A Scenario Builder without the fixture pain.
Scenarios look like:
scenario :apple do @apple = Fruit.create! :species => 'apple' end scenario :orange do @orange = Fruit.create! :species => 'orange' end scenario :fruitbowl => [:apple,:orange] do @fruitbowl = FruitBowl.create! :fruit => [@apple,@orange] end scenario :kitchen => :fruitbowl do @kitchen = Kitchen.create! :fruitbowl => @fruitbowl end
…and you use them in specs like:
describe Fruit, "@apple" do before do hornsby_scenario :apple end it "should be an apple" do @apple.species.should == 'apple' end end describe FruitBowl, "with and apple and an orange" do before do hornsby_scenario :fruitbowl end it "should have 2 fruits" do @fruitbowl.should have(2).fruit end end
Install the plugin:
./script/plugin install git://github.com/lachie/hornsby.git
Add the following to spec_helper.rb
# by default this loads scenarios from RAILS_ROOT/spec/hornsby_scenarios.rb Hornsby.load Spec::Runner.configure do |config| ... config.include(HornsbySpecHelper) end
Its just ruby, right? So go nuts:
1.upto(9) do |i| scenario("user_#{i}") do user = User.create! :name => "user#{i}" instance_variable_set("@user_#{i}",user) end end
If you’d like simply to load your scenarios into a database, use the rake task like so:
$ rake hornsby:scenario RAILS_ENV=test SCENARIO=fruitbowl
-
Make transactional for speed.
-
Add scenario namespaces for better organisation.
-
Detect scenario cycles.
Lachie Cox <lachie@smartbomb.com.au>
The code is based on Err’s code found in this post: errtheblog.com/post/7708
MIT, see LICENCE