我试图为脚本接收的命令行参数指定行为,以确保所有验证都通过.我的一些命令行参数将导致调用abortexit,因为提供的参数缺失或不正确.

我正在try 这样的东西,但不起作用:

# something_spec.rb
require 'something'
describe Something do
    before do
        Kernel.stub!(:exit)
    end

    it "should exit cleanly when -h is used" do
        s = Something.new
        Kernel.should_receive(:exit)
        s.process_arguments(["-h"])
    end
end

exit方法正在干净地启动,防止RSpec验证测试(我得到"SystemExit:exit").

我也try 过mock(Kernel),但这也不是我想要的(我看不到任何明显的区别,但这可能是因为我不确定如何精确地模拟内核,并确保在我的Something类中使用模拟内核).

推荐答案

试试这个:

module MyGem
  describe "CLI" do
    context "execute" do

      it "should exit cleanly when -h is used" do
        argv=["-h"]
        out = StringIO.new
        lambda { ::MyGem::CLI.execute( out, argv) }.should raise_error SystemExit
      end

    end
  end
end

Ruby相关问答推荐

Rack::Request - 如何获取所有标头?

配置 SubLime Linter 插件以使用 Ruby 1.9 语法

Jekyll 默认安装没有 _layouts 目录

each_with_index_do 从 1 开始索引

什么是 '?-mix' 在 Ruby 正则表达式中

Ruby 的 Object#taint 和 Object#trust 方法是什么?

是否有Ruby单行如果 x 则返回?

Ruby 中的 STDIN 和 $stdin 有什么区别?

Ruby 中的 Fail vs. raise:我们真的应该相信风格指南吗?

hash['key'] 到 Ruby 中的 hash.key

如何声明 RSpec 中示例之间共享的变量?

在 Selenium WebDriver 中按 Ctrl + A

require File.expand_path(..., __FILE__) 是最佳实践吗?

Ruby:module、require和include

如何删除Ruby中数组中满足条件的所有元素?

`respond_to?` 与 `respond_to_missing?`

如何在 Ruby 中创建可重用的块/proc/lambda?

是否可以使用 Ruby 读取文件的修改日期?

如何在没有 RVM 的 Ubuntu 上安装 Ruby 2

如何在 IRB 中重新加载脚本?