Cucumber Factory - create ActiveRecord objects without step definitions
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.
Fixture factory support
Given there is a movie (comedy) with the title "Groundhog Day"
You can use FactoryGirl traits by putting the traits in parentheses, as a comma-separated list:
Given there is a movie (moody, dark) with the title "Interstellar"
Overriding factory steps
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.
Installation and setup
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