def after *matchers, &proc
      proc || raise(ArgumentError, 'block is missing')
      matchers.flatten!
      matchers = [:*] if matchers.empty?
      return if after?.find {|x| x[0] == matchers && x[1].source_location == proc.source_location}
      after?.push([matchers, proc])
    end
def after *matchers, &proc
      proc || raise(ArgumentError, 'block is missing')
      matchers.flatten!
      matchers = [:*] if matchers.empty?
      return if after?.find {|x| x[0] == matchers && x[1].source_location == proc.source_location}
      after?.push([matchers, proc])
    end
same as `before` except it will run after matched tests.
 @note `after` hooks will run even on failed tests.
       however it wont run if some exception arise inside test.