单位测试打印到标准输出的顺序

时间:2015-09-04 17:33:45

标签: ruby rspec io

在RSpec中,我想测试程序是否以正确的顺序将正确的消息打印到标准输出。我正在使用" puts"打印。输出应该是

A
B
C

我该怎么做?我试过了

messages = ['A', 'B', 'C']
messages.each do |message|
  expect(STDOUT).to receive(puts).with(message).once
end

但是当我切换消息的顺序时,测试仍然通过。当消息以错误的顺序打印时,测试不应该通过。

我如何正确编写RSpec?

1 个答案:

答案 0 :(得分:4)

如果您使用的是RSpec 3,则可以使用ordered

messages = ['A', 'B', 'C']
messages.each do |message|
  expect(STDOUT).to receive(puts).with(message).ordered
end