У меня есть приложение командной строки, которое использует тор для обработки параметров.Я хочу провести модульное тестирование функциональности командной строки с помощью кода с помощью 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 работала и это прошло.