如何使用RSpec测试日志内容?

s-c*_*o-m 1 testing rspec ruby-on-rails file

例如,它生成了一个log(my_work.log)内容:

I, [2015-05-14T00:00:00.000000 #5590]  INFO -- : Work started.
Run Code Online (Sandbox Code Playgroud)

我想测试my_work.log是否有内容Work started.,该怎么办?

我不想匹配所有行包括datetime,因为包含#5590,我不能存根.

zet*_*tic 5

初始化Logger时,可以传入StringIO的实例以捕获输出,然后匹配预期的内容:

require 'logger'

describe "log" do
  let(:log) { StringIO.new }
  let(:logger) { Logger.new(log) }
  let(:expected) { "Work started" }

  it "should add the expected content to the log" do
    logger.info(expected)
    log.rewind
    expect(log.read).to match(/.+#{expected}$/)
  end

end
Run Code Online (Sandbox Code Playgroud)