0.0
No commit activity in last 3 years
No release in over 3 years
A simple utility to manage state when testing
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 2.7
 Project Readme

Statefulton

A simple interface for the state of objects under test. Useful as an interface along with Cucumber Transforms.

Installation

Add this line to your application's Gemfile:

gem 'statefulton'

And then execute:

$ bundle

Or install it yourself as:

$ gem install statefulton

How does it work

Defined DSL methods:

  • builder - Stores a block to use as a default builder method. Block is called when a 'make' method is triggered.
  • make - Creates a state method that returns a newly created instance of the object. Raises if called again.
  • expects - Creates a state method that returns an existing instance of the object. Raises if no instance exists.

Accessing the state of something:

StateOf(:name, "context")

Creating a statefulton:

Statefulton(:name) { # a block of calls to the DSL methods }

Reset state between tests:

Statefulton::Reset.all

Cucumber Usage

Define your cucumber feature on features or a subdirectory.

Given a user
When I activate that user

Define your steps on features/steps

When /^I activate (that user)$/ do |user|
  user.activate!
end

Transform /^(a|that) user$/ do |state|
  StateOf(:user, state)
end

To define a new statefulton on features/support/statefulton.rb:

Statefulton(:user) do
  builder { User.new }

  make "an"

  expects "that" # Calling "that" will return the singular instance
end

What is available for you at this point

StateOf(:user, "that") #raise error: instance not created
StateOf(:user, "an")   #build the object
StateOf(:user, "an")   #raise error: instance already created
StateOf(:user, "that") #get the object

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (with tests!) (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request