我有一个命令行应用程序,它使用thor来处理选项的解析.我想用test-unit和/或minitest对代码进行命令行功能的单元测试.
我似乎无法弄清楚如何确保ARGV数组(通常会从命令行保存选项)保存我的测试选项,以便可以针对代码测试它们.
具体应用代码:
# myapp/commands/build.rb require 'thor' module Myapp module Commands # Define build commands for MyApp command line class Build < Thor::Group include Thor::Actions build = ARGV.shift build = aliases[build] || build # Define arguments and options argument :type class_option :test_framework,:default => :test_unit # Define source root of application def self.source_root File.dirname(__FILE__) end case build # 'build html' generates a html when 'html' # The resulting html puts "<p>HTML</p>" end end end end
可执行文件
# bin/myapp
测试文件
# tests/test_build_html.rb require 'test/unit' require 'myapp/commands/build' class TestBuildHtml < Test::Unit::TestCase include Myapp::Commands # HERE'S WHAT I'D LIKE TO DO def test_html_is_built # THIS SHOULD SIMULATE 'myapp build html' FROM THE COMMAND-LINE result = MyApp::Commands::Build.run(ARGV << 'html') assert_equal result,"<p>HTML</p>" end end
我已经能够在测试类中将数组传递给ARGV,但是一旦我调用Myapp / Commands / Build,ARGV似乎是空的.我需要确保ARGV数组持有’build’和’html’,以便Build命令工作并通过.