expect{test_method}.to output(test_str).to_stdout
有效,但仅当我在方法中使用print
时有效。如果我使用puts
,则测试会失败,因为puts
将\n
添加到末尾(我知道这是print
和puts
之间的区别)。 / p>
所以有一种方法可以测试输出是否包含而不是
某些字符串?
expect(STDOUT).to receive(:puts).and include(test_str)
(我猜这是行不通的)。
答案 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。基本上,没有它,您将无法在正则表达式的//
中进行正确的字符串插值。