加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 如何规范退出或中止的方法

发布时间:2020-12-16 21:42:58 所属栏目:百科 来源:网络整理
导读:我有一种从CLI触发的方法,它具有明确退出或中止的逻辑路径.我发现在编写这个方法的规范时,RSpec将它标记为失败,因为退出是异常.这是一个裸体的例子: def cli_method if condition puts "Everything's okay!" else puts "GTFO!" exit endend 我可以用lambda
我有一种从CLI触发的方法,它具有明确退出或中止的逻辑路径.我发现在编写这个方法的规范时,RSpec将它标记为失败,因为退出是异常.这是一个裸体的例子:
def cli_method
  if condition
    puts "Everything's okay!"
  else
    puts "GTFO!"
    exit
  end
end

我可以用lambda来包装spec,应该是raise_error(SystemExit),但是忽略块内发生的任何断言.要清楚:我没有测试退出本身,而是在它之前发生的逻辑.我可以如何去指定这种类型的方法?

解决方法

简单地把你的断言放在lambda之外,例如:
class Foo
  attr_accessor :result

  def logic_and_exit
    @result = :bad_logic
    exit
  end
end

describe 'Foo#logic_and_exit' do
  before(:each) do
    @foo = Foo.new
  end

  it "should set @foo" do
    lambda { @foo.logic_and_exit; exit }.should raise_error SystemExit
    @foo.result.should == :logics
  end
end

当我运行rspec,它正确地告诉我:

expected: :logics
     got: :bad_logic (using ==)

有没有这种情况对你来说不行?

编辑:我在lambda中添加了一个’exit’调用,以处理逻辑不和不退出的情况.

EDIT2:更好的是,在测试中做这个:

begin
  @foo.logic_and_exit
rescue SystemExit
end
@foo.result.should == :logics

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读