如何使用Minitest测试命令行gem

问题描述 投票:0回答:1

我想使用Minitest测试我的红宝石宝石。我不知道如何设置测试文件来测试命令行参数。我知道我的命令行参数将来自变量ARGV,但我不知道如何通过Minitest访问它。

我还需要知道是否需要bin文件夹中的可执行文件或特定的ruby文件(在这种情况下,称为CLI.rb的文件)。

This答案是我在Stackoverflow上找到的最接近的答案,但答案似乎与我试图做的有用的事情相去甚远,至少据我所知。

ruby minitest argv
1个回答
0
投票

[不要在测试中弄乱ARGV。这是一个常数,应该这样对待。而是将需要测试的代码解耦,这样就可以将所需的任何数据传递给它。 exe应该只实例化CLI类,然后将ARGV传递给它。因为它是如此的基础,所以不需要仅仅为了确保文件运行就测试该文件。

这是您的exe外观:

require 'mygem'

MyGem::CLI.new(ARGV).run

CLI代码:

module MyGem
  class CLI
    def initialize(argv)
      @options = parse_argv(argv)
    end

    def run
      # main code here
    end

    private

    def parse_argv(argv)
      # I'd use getoptlong for this since it's built in to Ruby.
    end
  end
end

然后您的测试将如下所示:

require 'test_helper'

module MyGem
  class CLITest < MiniTest::Test
    def test_help_with_no_args
      out, err = capture_io { CLI.new([]).run }
      assert_empty err, 'nothing should be written to STDERR'
      refute_empty out, 'help should be written to STDOUT'
    end
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.