【问题标题】:How can I validate exit value in rspec? [duplicate]如何验证 rspec 中的退出值? [复制]
【发布时间】:2013-12-11 08:50:37
【问题描述】:

我有一个方法有时会调用exit(numeric_value)

rspec 是否可以验证在调用方法时,进程是否以正确的值退出?

我看过这些其他帖子,但他们没有回答这个具体问题。

【问题讨论】:

  • 您需要将exit 存根,否则当遇到该行时,您的程序实际上会退出。不过,你真的不应该只是那样救助。改为引发异常。
  • @meagar 我想用 rspec 测试的 ruby​​ 脚本用于检查退出值并采取相应措施的外部框架 (Sensu) 的上下文中。所以在这种情况下似乎需要调用exit
  • 啊,我没有意识到 Ruby 中的 exit 实际上确实引发了异常。您的问题是您发布的第一个链接的副本,答案对您来说很好。只需捕获SystemExit 异常。 lambda { whatever }.should raise_error SystemExit,或者只是自己捕获SystemExit 异常并检查捕获的异常的.status。 `
  • @meagar 我知道我可以捕获 SystemExit 异常。我不知道如何解决的问题是:如何验证我们是否以状态码 1 或 2 退出。
  • 正如我所说:测试您捕获的异常的.status

标签: ruby rspec


【解决方案1】:

给定示例 ruby​​ 代码:

def it_will_exit
  puts "before exit"
  exit(false)
  puts "never get here"
end

rspec 测试用例可以是:

it "it must exit" do
  expect { it_will_exit }.raise_exception(SystemExit)
end

it "the exit value should be false" do
  begin
    it_will_exit
  rescue SystemExit=>e
    expect(e.status).to eq(1)
  end
end

【讨论】:

    猜你喜欢
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多