如何在rspec中使用部分匹配来测试看跌期权?

时间:2018-10-28 16:56:39

标签: ruby rspec

expect{test_method}.to output(test_str).to_stdout有效,但仅当我在方法中使用print时有效。如果我使用puts,则测试会失败,因为puts\n添加到末尾(我知道这是printputs之间的区别)。 / p>

所以有一种方法可以测试输出是否包含而不是

某些字符串?

expect(STDOUT).to receive(:puts).and include(test_str)(我猜这是行不通的)。

1 个答案:

答案 0 :(得分:0)

我建议尝试使用正则表达式:

expect {test_method}.to output(/#{Regexp.quote(test_str)}/).to_stdout

the rspec blog中提供了一些示例,这些示例在发布时可能会有所帮助:

expect { print "foo" }.to output("foo").to_stdout
expect { print "foo" }.to output(/fo/).to_stdout
expect { warn  "bar" }.to output(/bar/).to_stderr

output matcher docs包含更多示例:

expect { print 'foo' }.to output.to_stdout
expect { print 'foo' }.to output('foo').to_stdout
expect { print 'foo' }.to output(/foo/).to_stdout

expect { do_something }.to_not output.to_stdout

expect { warn('foo') }.to output.to_stderr
expect { warn('foo') }.to output('foo').to_stderr
expect { warn('foo') }.to output(/foo/).to_stderr

expect { do_something }.to_not output.to_stderr

expect { system('echo foo') }.to output("foo\n").to_stdout_from_any_process
expect { system('echo foo', out: :err) }.to output("foo\n").to_stderr_from_any_process

使用Regexp.quote来自this question's answers。基本上,没有它,您将无法在正则表达式的//中进行正确的字符串插值。