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
2025
2026
 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