Ruby 如何在rspec中测试部分匹配的看跌期权?

Ruby 如何在rspec中测试部分匹配的看跌期权?,ruby,rspec,Ruby,Rspec,expect{test\u method}.to output(test\u str).to\u stdout有效,但仅当我在方法中使用print时有效。如果我使用put,则测试失败,因为put将\n添加到末尾(我知道这是打印和放置之间的区别) 那么,有没有办法测试输出是否包含而不是等于a 某些字符串 expect(STDOUT).接收(:put).和包含(test_str),我猜这是行不通的。我建议尝试使用正则表达式: expect {test_method}.to output(/#{Reg

expect{test\u method}.to output(test\u str).to\u stdout
有效,但仅当我在方法中使用
print
时有效。如果我使用
put
,则测试失败,因为
put
\n
添加到末尾(我知道这是
打印
放置
之间的区别)

那么,有没有办法测试输出是否包含而不是等于a

某些字符串


expect(STDOUT).接收(:put).和包含(test_str)
,我猜这是行不通的。

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

expect {test_method}.to output(/#{Regexp.quote(test_str)}/).to_stdout
发布此功能时,中提供了一些可能有帮助的示例:

expect { print "foo" }.to output("foo").to_stdout
expect { print "foo" }.to output(/fo/).to_stdout
expect { warn  "bar" }.to output(/bar/).to_stderr
其中包括更多的例子:

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
的用法取自。基本上,没有它,您就无法在正则表达式的
/
中进行正确的字符串插值