diff options
Diffstat (limited to 'activesupport/lib/active_support/testing/assertions.rb')
-rw-r--r-- | activesupport/lib/active_support/testing/assertions.rb | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/activesupport/lib/active_support/testing/assertions.rb b/activesupport/lib/active_support/testing/assertions.rb index ce2f44efd6..ca51adba1e 100644 --- a/activesupport/lib/active_support/testing/assertions.rb +++ b/activesupport/lib/active_support/testing/assertions.rb @@ -31,13 +31,17 @@ module ActiveSupport # assert_difference 'Article.count', -1, "An Article should be destroyed" do # post :delete, :id => ... # end - def assert_difference(expressions, difference = 1, message = nil, &block) - expression_evaluations = Array(expressions).collect{ |expression| lambda { eval(expression, block.send(:binding)) } } + def assert_difference(expression, difference = 1, message = nil, &block) + b = block.send(:binding) + exps = Array.wrap(expression) + before = exps.map { |e| eval(e, b) } - original_values = expression_evaluations.inject([]) { |memo, expression| memo << expression.call } yield - expression_evaluations.each_with_index do |expression, i| - assert_equal original_values[i] + difference, expression.call, message + + exps.each_with_index do |e, i| + error = "#{e.inspect} didn't change by #{difference}" + error = "#{message}.\n#{error}" if message + assert_equal(before[i] + difference, eval(e, b), error) end end @@ -53,8 +57,8 @@ module ActiveSupport # assert_no_difference 'Article.count', "An Article should not be destroyed" do # post :create, :article => invalid_attributes # end - def assert_no_difference(expressions, message = nil, &block) - assert_difference expressions, 0, message, &block + def assert_no_difference(expression, message = nil, &block) + assert_difference expression, 0, message, &block end end end |