aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/testing
diff options
context:
space:
mode:
authorDaniel Ma <drailskid@yahoo.com>2017-10-30 11:21:28 -0700
committerDaniel Ma <drailskid@yahoo.com>2017-11-13 11:49:35 -0800
commitaf0361da0ac7e5b7703e772ce69c21c3315a54d0 (patch)
tree765fa913f758f7dfc67eaac2e37bbc5c154e0bd0 /activesupport/lib/active_support/testing
parent705cf47033afabf4530a209f907ff4bf35acf2c2 (diff)
downloadrails-af0361da0ac7e5b7703e772ce69c21c3315a54d0.tar.gz
rails-af0361da0ac7e5b7703e772ce69c21c3315a54d0.tar.bz2
rails-af0361da0ac7e5b7703e772ce69c21c3315a54d0.zip
`assert_changes` should always assert some change
While using `assert_changes`, I came across some unexpected behavior: if you provide a `to:` argument, and the expression matches but didn't actually change, the assertion will pass. The way `assert_changes` reads, I assumed that it would both assert that there was any change at all, _and_ that the expression changed to match my `to:` argument. In the case of just a `from:` argument, `assert_changes` does what I expect as well. It asserts that the before value `=== from` and that the after value changed. My key change is that `assert_changes` will now _always_ assert that expression changes, no matter what combination of `from:` and `to:` arguments
Diffstat (limited to 'activesupport/lib/active_support/testing')
-rw-r--r--activesupport/lib/active_support/testing/assertions.rb11
1 files changed, 6 insertions, 5 deletions
diff --git a/activesupport/lib/active_support/testing/assertions.rb b/activesupport/lib/active_support/testing/assertions.rb
index b24aa36ede..6f69c48674 100644
--- a/activesupport/lib/active_support/testing/assertions.rb
+++ b/activesupport/lib/active_support/testing/assertions.rb
@@ -156,11 +156,12 @@ module ActiveSupport
after = exp.call
- if to == UNTRACKED
- error = "#{expression.inspect} didn't change"
- error = "#{message}.\n#{error}" if message
- assert before != after, error
- else
+ error = "#{expression.inspect} didn't change"
+ error = "#{error}. It was already #{to}" if before == to
+ error = "#{message}.\n#{error}" if message
+ assert before != after, error
+
+ unless to == UNTRACKED
error = "#{expression.inspect} didn't change to #{to}"
error = "#{message}.\n#{error}" if message
assert to === after, error