将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
吗?
答案 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