【问题标题】:How to test puts with partial match in rspec?如何在 rspec 中测试部分匹配的看跌期权?
【发布时间】:2018-10-28 16:56:39
【问题描述】:

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

那么有没有办法测试输出包含而不是等于一个

某个字符串?

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

【问题讨论】:

    标签: ruby rspec


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-12-20
      • 2019-06-20
      • 2022-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      相关资源
      最近更新 更多