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