Repository is archived
No release in over 3 years
Low commit activity in last 3 years
Generate assert code from a result inside a unit or integration test. This is useful if you have code that you've spiked or eyeballed as 'working' and you'd like to produce some assertions, without editing the output of pretty-inspect manually or making it all up.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 2.0
~> 5.0
~> 1.9
>= 13.0
~> 0.76
~> 3.6
~> 0.17, >= 0.17.1
 Project Readme

AssertGenerator

This generates assert code from a result inside a unit or integration test. This is useful if you have code that you've spiked or eyeballed as 'working' and you'd like to produce some assertions, without editing the output of pretty-inspect manually or making it all up.

Installation

Add this line to your application's Gemfile:

gem 'assert_generator'

And then execute:

$ bundle

Or install it yourself as:

$ gem install assert_generator

Usage

require 'assert_generator'

n = 2 + 3
res = {
    number: n,
    text: "(2 + 3) = #{n}"
}

AssertGenerator.generate_asserts(res, 'res')

Will output when run:

assert_equal 5, @res[:number]
assert_equal "(2 + 3) = 5", @res[:text]

which you can then paste into your code, and the asserts will pass.

Supported source types

Scalars

t = 2; AssertGenerator.generate_asserts(t, 't') generates assert_equal 2, t

Arrays

t = [1,2,3]; AssertGenerator.generate_asserts(t, 't')

generates

assert_equal 3, t.count
assert_equal 1, t[0]
assert_equal 2, t[1]
assert_equal 3, t[2]

Ranges

t = (4..7); AssertGenerator.generate_asserts { 't' }

generates

assert_equal 4, t.first
assert_equal 7, t.last

Hashes

h = { a: 2 }
AssertGenerator.generate_asserts(h, 'h')

generates:

assert_equal 2, h[:a]

Dates

Generally

d = Date.new(2019,11,10)
AssertGenerator.generate_asserts(d, 'd')

generates:

assert_equal Date.new(2019, 11, 10), d

But with relative dates set (for when we have floating date fixtures):

d = Date.new(2019,11,10)
AssertGenerator.generate_asserts(relative_dates: 'Date.new(2019,11,1)') { 'd' }

generates:

assert_equal Date.new(2019,11,1) - 9.days, d

Active Record

If you have an AR object thing, then AssertGenerator.generate_asserts(thing, 'thing') will produce assertions for each attribute of the object.

Note that index values and similar may well be wrong, unless you are using fixtures with a specified id.

Also, any class which quacks like AR by defining an attributes hash will be handled as for AR, allowing arbitrary classes to be tested.

TODO

The attempt at reflecting values back is halfbaked, but a bit limited by the power of the ruby system to reflect.

Development

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/sharesight/assert_generator.

License

The gem is available as open source under the terms of the MIT License.