摩卡期望与雷神0.19.1失败

时间:2014-04-11 08:31:06

标签: ruby gem thor

将Thor从0.18.1升级到0.19.1后,我看到Mocha的奇怪故障(使用测试单元)

/gems/2.1.0/gems/test-unit-2.5.5/lib/test/unit/ui/console/testrunner.rb:395:
  in `output': unexpected invocation: #<IO:0x7fd6c986ab58>.puts() (Mocha::ExpectationError)

unsatisfied expectations:
  - expected exactly once, not yet invoked: #<IO:0x7fd6c986ab58>.puts('1.0.0')
from rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/test-unit-2.5.5/lib/test/unit/ui/console/testrunner.rb:389:in `nl'

代码:

def version
  say VERSION
end 

测试:

def test_should_print_version
  $stdout.expects(:puts).with(VERSION)
  App::CLI.start %W(version)
end 

有趣的是,$stdout.expects(:print).with(VERSION + "\n")没有问题。我正在使用ruby 2.1.1p76

似乎第一个例外是由于puts被调用,第二个例子是由于没有被调用。我应该以不同的方式使用expect吗?

1 个答案:

答案 0 :(得分:0)

我通过将$ stdout重定向到StringIO实例来解决这个问题,建议here

require 'stringio'

module Kernel
  def capture_stdout
    out = StringIO.new
    $stdout = out
    yield
    return out
  ensure
    $stdout = STDOUT
  end
end

更新了测试:

def test_should_print_version
  #$stdout.expects(:puts).with(VERSION)
  out = capture_stdout { App::CLI.start %W(version) }
  assert_match VERSION, out.string
end