assert_difference 0.4.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +8 -0
- data/assert_difference.gemspec +2 -2
- data/lib/assert_difference.rb +16 -6
- metadata +4 -4
data/README.md
CHANGED
@@ -22,6 +22,14 @@ would require a more verbose syntax:
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
+
Expectations can also be ranges, for example:
|
26
|
+
|
27
|
+
assert_difference "Blog.count" => +1, "Post.count" => 2..5 do # Generate some sample posts when creating a blog
|
28
|
+
post :create
|
29
|
+
end
|
30
|
+
|
31
|
+
On top of that, error reporting is improved by displaying all the counters that didn't match except only one.
|
32
|
+
|
25
33
|
To use it with Test::Unit add this code:
|
26
34
|
|
27
35
|
class Test::Unit::TestCase
|
data/assert_difference.gemspec
CHANGED
@@ -11,8 +11,8 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.authors = ["J. Pablo Fernández"]
|
12
12
|
s.email = ["pupeno@pupeno.com"]
|
13
13
|
s.homepage = "http://pupeno.github.com/assert_difference/"
|
14
|
-
s.summary = "
|
15
|
-
s.description = "
|
14
|
+
s.summary = "Like Rails' assert_difference, but more powerful"
|
15
|
+
s.description = "Like Rails' assert_difference, but more compact and readable syntax through hashes, testing ranges and improved error reporting."
|
16
16
|
|
17
17
|
s.required_rubygems_version = ">= 1.3.6"
|
18
18
|
s.rubyforge_project = "assert_difference"
|
data/lib/assert_difference.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# Copyright © 2010, 2011, 2012 José Pablo Fernández
|
3
3
|
|
4
4
|
module AssertDifference
|
5
|
-
VERSION = "0.
|
5
|
+
VERSION = "0.5.0" unless defined?(::AssertDifference::VERSION)
|
6
6
|
|
7
7
|
# Test numeric difference between the return value of an expression as a result of what is evaluated
|
8
8
|
# in the yielded block.
|
@@ -58,17 +58,23 @@ module AssertDifference
|
|
58
58
|
# end
|
59
59
|
# assert_equal [@user.email], email.to
|
60
60
|
#
|
61
|
+
# the expectations can also be ranges, for example:
|
62
|
+
#
|
63
|
+
# assert_difference "Article.count" => 1, "sample_coments.count" => 2..4 do
|
64
|
+
# post :something
|
65
|
+
# end
|
66
|
+
#
|
61
67
|
# @param [Array, Hash] expressions array of expressions to evaluate or hash
|
62
68
|
# table of expressions and expected difference.
|
63
|
-
# @param [Integer]
|
69
|
+
# @param [Integer or Range] expected_difference expected difference when using an array or single expression.
|
64
70
|
# @param [String, nil] message error message to display. One would be constructed if nil.
|
65
71
|
# @return whatever the block returned
|
66
|
-
def assert_difference(expressions,
|
72
|
+
def assert_difference(expressions, expected_difference = 1, message = nil, &block)
|
67
73
|
b = block.send(:binding)
|
68
74
|
if !expressions.is_a? Hash
|
69
75
|
exps = Array.wrap(expressions)
|
70
76
|
expressions = {}
|
71
|
-
exps.each { |e| expressions[e] =
|
77
|
+
exps.each { |e| expressions[e] = expected_difference }
|
72
78
|
end
|
73
79
|
|
74
80
|
before = {}
|
@@ -78,9 +84,13 @@ module AssertDifference
|
|
78
84
|
|
79
85
|
error_messages = []
|
80
86
|
expressions.each do |exp, diff|
|
81
|
-
expected =
|
87
|
+
expected = if diff.is_a? Range
|
88
|
+
(before[exp] + diff.first)..(before[exp] + diff.end)
|
89
|
+
else
|
90
|
+
before[exp] + diff
|
91
|
+
end
|
82
92
|
actual = eval(exp, b)
|
83
|
-
if expected != actual
|
93
|
+
if expected.is_a?(Range) ? !expected.include?(actual) : expected != actual
|
84
94
|
error = "#{exp.inspect} didn't change by #{diff} (expecting #{expected}, but got #{actual})"
|
85
95
|
error = "#{message}.\n#{error}" if message
|
86
96
|
error_messages << error
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: assert_difference
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -27,8 +27,8 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
-
description:
|
31
|
-
|
30
|
+
description: Like Rails' assert_difference, but more compact and readable syntax through
|
31
|
+
hashes, testing ranges and improved error reporting.
|
32
32
|
email:
|
33
33
|
- pupeno@pupeno.com
|
34
34
|
executables: []
|
@@ -67,6 +67,6 @@ rubyforge_project: assert_difference
|
|
67
67
|
rubygems_version: 1.8.24
|
68
68
|
signing_key:
|
69
69
|
specification_version: 3
|
70
|
-
summary:
|
70
|
+
summary: Like Rails' assert_difference, but more powerful
|
71
71
|
test_files: []
|
72
72
|
has_rdoc:
|