Module: Minitest::Assertions

Defined in:
lib/minitest-logger.rb

Instance Method Summary collapse

Instance Method Details

#assert_log(expected, msg = nil, options = {}, &block) ⇒ Object

Define new assertion assert_log

Options

Define test logger (:log)

With option :log you can define or replace the logger to test.

It is recommended to define the logger during setup in Minitest::Test.

Define log level (:level)

With option :level you can set an alternative level for the test.

See also #logger_evaluation for more information

Examples

assert_log(" INFO log: Hello World\n"){ @log.info("Hello World") }
assert_log(" INFO log: Hello World\n", :log => @log){ @log.info("Hello World") }
assert_log(" INFO log: Hello World\n", :level => Log4r::INFO){ @log.info("Hello World") }
assert_log(nil, :level => Log4r::WARN){ @log.info("Hello World") }

  msg = message(msg, E) { diff exp, act }
  assert exp == act, msg

Define a formatter (Only Log4r)

If you want to test with a special formatter you can define it with this parameter.

The default can be set with #formatter and during the setup.



191
192
193
194
195
196
197
198
199
200
201
202
203
204
# File 'lib/minitest-logger.rb', line 191

def assert_log(expected, msg=nil, options = {}, &block)
  if msg.is_a?(Hash)
    options = msg
    msg = nil
  end

  logtext = logger_evaluation(options[:log] || @log, 
                                options[:level], 
                                options[:formatter] || @formatter, 
                                &block)
    
  err_msg = Regexp === expected ? :assert_match : :assert_equal
  send err_msg, expected, logtext, message(msg) { "Logger #{options[:log] || @log} logs unexpected messages" } 
end

#assert_silent_log(msg = nil, options = {}, &block) ⇒ Object

Test for silent log (No messages are returned).

For details on options see #assert_log and #logger_evaluation



210
211
212
213
214
215
216
217
218
# File 'lib/minitest-logger.rb', line 210

def assert_silent_log(msg=nil, options = {}, &block)
  if msg.is_a?(Hash)
    options = msg
    msg = nil
  end
  
  logtext = logger_evaluation(options[:log] || @log, options[:level], &block)
  assert !logtext, message(msg) { "Expected #{options[:log] || @log} to be silent, but returned\n #{mu_pp(logtext)}" }
end

#logger_evaluation(log, level = nil, formatter = nil) ⇒ Object

Evaluate block and collect the messages of a logger.

Argument level:

This enables you to test less messages (e.g. only errors) without the need of adapt the logger itself.

Attention: The level of the logger has a higher priority the the level of the outputter. If the logger logs no DEBUG-messages, the output will also be empty, independent of the value of this parameter.

Argument formatter

If you want to test with a special formatter you can define it with this parameter.

Raises:

  • (ArgumentError)


138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'lib/minitest-logger.rb', line 138

def logger_evaluation(log, level=nil, formatter = nil)
  raise ArgumentError unless defined? log
  raise ArgumentError unless block_given?
  
  case log.class.to_s
    when 'Log4r::Logger'
      log.outputters << outputter = Log4r::StringOutputter.new('stringoutputter') 
      outputter.level = level if level
      outputter.formatter = formatter if formatter
    when 'Logger'
      log.catch_messages(level)
    end
  yield #call block to get messages
  case log.class.to_s
    when 'Log4r::Logger'
      logtext = outputter.flush
    when 'Logger'
      logtext = log.catch_messages_stop()
    end      
  return logtext
end

#refute_silent_log(msg = nil, options = {}, &block) ⇒ Object

Test for silent log (No messages are returned)

For details on options see #assert_log and #logger_evaluation



224
225
226
227
228
229
230
231
232
# File 'lib/minitest-logger.rb', line 224

def refute_silent_log(msg=nil, options = {}, &block)
  if msg.is_a?(Hash)
    options = msg
    msg = nil
  end
  logtext = logger_evaluation(options[:log] || @log, options[:level], &block)
  
  assert logtext, message(msg) { "Expected #{options[:log] || @log} not to be silent" }
end