File: active_support/testing/assertions.rb

Overview
Module Structure
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: ActiveSupport#1
  module: Testing#2
  module: Assertions#3
has properties
method: assert_difference / 4 #34
method: assert_no_difference / 3 #60
method: assert_blank / 1 #67
method: assert_present / 1 #74

Code

   1  module ActiveSupport
   2    module Testing
   3      module Assertions
   4        # Test numeric difference between the return value of an expression as a result of what is evaluated
   5        # in the yielded block.
   6        #
   7        #   assert_difference 'Article.count' do
   8        #     post :create, :article => {...}
   9        #   end
  10        #
  11        # An arbitrary expression is passed in and evaluated.
  12        #
  13        #   assert_difference 'assigns(:article).comments(:reload).size' do
  14        #     post :create, :comment => {...}
  15        #   end
  16        #
  17        # An arbitrary positive or negative difference can be specified. The default is +1.
  18        #
  19        #   assert_difference 'Article.count', -1 do
  20        #     post :delete, :id => ...
  21        #   end
  22        #
  23        # An array of expressions can also be passed in and evaluated.
  24        #
  25        #   assert_difference [ 'Article.count', 'Post.count' ], +2 do
  26        #     post :create, :article => {...}
  27        #   end
  28        #
  29        # A error message can be specified.
  30        #
  31        #   assert_difference 'Article.count', -1, "An Article should be destroyed" do
  32        #     post :delete, :id => ...
  33        #   end
  34        def assert_difference(expression, difference = 1, message = nil, &block)
  35          b = block.send(:binding)
  36          exps = Array.wrap(expression)
  37          before = exps.map { |e| eval(e, b) }
  38 
  39          yield
  40 
  41          exps.each_with_index do |e, i|
  42            error = "#{e.inspect} didn't change by #{difference}"
  43            error = "#{message}.\n#{error}" if message
  44            assert_equal(before[i] + difference, eval(e, b), error)
  45          end
  46        end
  47 
  48        # Assertion that the numeric result of evaluating an expression is not changed before and after
  49        # invoking the passed in block.
  50        #
  51        #   assert_no_difference 'Article.count' do
  52        #     post :create, :article => invalid_attributes
  53        #   end
  54        #
  55        # A error message can be specified.
  56        #
  57        #   assert_no_difference 'Article.count', "An Article should not be destroyed" do
  58        #     post :create, :article => invalid_attributes
  59        #   end
  60        def assert_no_difference(expression, message = nil, &block)
  61          assert_difference expression, 0, message, &block
  62        end
  63        
  64        # Test if an expression is blank. Passes if object.blank? is true.
  65        #
  66        #   assert_blank [] # => true
  67        def assert_blank(object)
  68          assert object.blank?, "#{object.inspect} is not blank"
  69        end
  70        
  71        # Test if an expression is not blank. Passes if object.present? is true.
  72        #
  73        #   assert_present {:data => 'x' } # => true
  74        def assert_present(object)
  75          assert object.present?, "#{object.inspect} is blank"
  76        end
  77      end
  78    end
  79  end