cucumber_factory Rubygems

Create records from Cucumber features without writing step definitions.

3 years after

= Cucumber Factory - create ActiveRecord objects without step definitions

Cucumber Factory allows you to create ActiveRecord objects directly from your {Cucumber}[http://cukes.info/] features. No step definitions required.

== Examples

The following will call {Movie.make}[http://github.com/notahat/machinist], {Factory.create(:movie)}[http://github.com/thoughtbot/factory_girl], Movie.create! or Movie.new, depending on what's available:

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"

== Setting associations

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

{Machinist blueprints}[http://github.com/notahat/machinist] and {factory_girl factories}[http://github.com/thoughtbot/factory_girl] will be used when available.

You can use a {FactoryGirl child factory}[https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#inheritance] or {Machinist named blueprint}[https://github.com/notahat/machinist/tree/1.0-maintenance#named-blueprints] by putting the variant name in parentheses:

Given there is a movie (comedy) with the title "Groundhog Day"

You can use {FactoryGirl traits}[https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#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:

config.gem 'cucumber_factory'

In Rails 3+, add the following to your Gemfile:

gem 'cucumber_factory'

Finally, create a file features/step_definitions/factory_steps.rb, which just says

Cucumber::Factory.add_steps(self)

=== Credits

Henning Koch

{makandra.com}[http://makandra.com/]

{gem-session.com}[http://gem-session.com/]


Top Contributors

henning-koch kratob thomasklemm dbloete micapam bitboxer dirkholzapfel Nikamura

Releases

-   v1.11.4 zip tar
-   v1.11.3 zip tar
-   v1.11.2 zip tar
-   v1.11.1 zip tar
-   v1.11.0 zip tar
-   v1.10.0 zip tar
-   v1.9.2 zip tar
-   v1.9.1 zip tar
-   v1.8.6 zip tar
-   v1.8.5 zip tar
-   v1.8.4 zip tar
-   v1.8.3 zip tar
-   v1.8.2 zip tar
-   v1.8.1 zip tar
-   v1.8.0 zip tar
-   v1.7.4 zip tar
-   v1.7.3 zip tar
-   v1.7.2 zip tar
-   v1.7.1 zip tar