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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |