Cucumber Factory allows you to create ActiveRecord objects directly from your Cucumber features. No step definitions required.
Given there is a movie
To create a new record with attributes set, you can say:
Given there is a movie with the title "Sunshine" and the year "2007"
Boolean attributes can be set by appending “which”, “that” or “who” at the end:
Given there is a movie which is awesome And there is a movie with the name "Sunshine" that is not a comedy And there is a director who is popular
Instead of “and” you can also use “but” and commas to join sentences:
Given there is a movie which is awesome, popular and successful but not science fiction And there is a director with the income "500000" but with the account balance "-30000"
You can set belongs_to associations by referring to the last created record of a kind by saying “above”:
Given there is a movie with the title "Before Sunrise" And there is a movie with the prequel above
The example above also shows how to set has_many associations - you simply set the belongs_to association on the other side.
You can also set associations by referring to any string attribute used previously:
Given there is a movie with the title "Before Sunrise" And there is a movie with the title "Limitless" And there is a movie with the prequel "Before Sunrise"
You can also explicitly give a record a name and use it to set a belongs_to association below:
Given "Before Sunrise" is a movie And there is a movie with the title "Limitless" And there is a movie with the prequel "Before Sunrise"
Note that in the example above, “Before Sunrise” is only a name you can use to refer to the record. The name is not actually used for the movie title, or any other attribute value.
You can use named Machinist blueprint such as Movie.blueprint(:comedy) like this:
Given there is a movie (comedy) with the title "Groundhog Day"
If you want to override a factory step with your own version, just do so:
Given /^there is a movie with good actors$/ do movie = Movie.make movie.actors << Actor.make(:name => 'Clive Owen') movie.actors << Actor.make(:name => 'Denzel Washington') end
Custom steps will always be preferred over factory steps. Also Cucumber will not raise a warning about ambiguous steps if the only other matching step is a factory step.
Cucumber Factory is a gem, which you can install with
sudo gem install cucumber_factory
In Rails 2, add the following to your environment.rb:
In Rails 3, add the following to your Gemfile:
Finally, create a file features/step_definitions/factory_steps.rb, which just says
We cannot guarantee Rails 3 compatibility at this point, but we will upgrade the gem when Rails 3 is released.