Step Specr plugin
Plugin details
Documentation
ruby script/plugin install git://github.com/mhennemeyer/stepspecr
A rather trivial one
=================
In a plaintext story the following step is needed:
Given 1 articles
Instead of 'just implement' and 'running the story as a test': write a spec:
in PROJECT_HOME/spec/steps/article_steps_spec.rb
require File.expand_path(File.dirname(__FILE__) + "/stepspecr_helper.rb") describe "Given $count articles" do it "should create 1 articles for count=1" do class Article end Article.should_receive :create step_eval "Given 1 article", :articles end end
Running the example will perform the following actions:
1. It will (try to) collect the steps supplied to step_group :articles
2. It will run the step
3. It will FAIL ...
$ script/spec --format specdoc spec/steps/article_steps_spec.rb
Implement the step:
in PROJECT_HOME/stories/steps/article_steps.rb
steps_for :articles do Given "$count articles" do |count| count.to_i.times { Article.create } end end
Run the example again and it should PASS.
A more complex example
====================
You want a step that creates modelobjects that are specified in the story:
Given 5 articles
Given 1 post
Given 17 lists
...
Using StepSpecr.step is a little bit more involved than plain step_eval but gives you a facility to configure the thing so that you can DRY it up.
This will be more than one example: (Just showing the description - BDD doesn't mean to write more than one example at a time)
describe "Given $count $models" do before(:all) do StepSpecr.configure do step_group :resources end end it "should create the specified model" do StepSpecr.spec "Given 1 specific_model" do before do class SpecificModel end SpecificModel.should_receive(:create) end end end it "should create the specified number of models" do StepSpecr.spec "Given 5 specific_models" do before do class SpecificModel end SpecificModel.should_receive(:create).exactly(5).times end end end it "should create 17 lists for count=17, models=lists" do StepSpecr.spec "Given 17 lists" do before do class List end List.should_receive(:create).exactly(17).times end end end end
The implementation could look like this:
steps_for :resources do Given "$count $models" do |count, name| klass = eval "#{name.singularize.camelize}" count.to_i.times { klass.create } end end
Further Documentation
There is currently no advanced documentation for this plugin.
New documentationEdit plugin | (0 older versions) | Last edited by: hardway, 6 months ago

