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

前端之家收集整理的这篇文章主要介绍了ruby – 如何规范退出或中止的方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一种从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
原文链接:https://www.f2er.com/ruby/267046.html

猜你在找的Ruby相关文章