Tengo una aplicación de línea de comandos que usa thor para manejar el análisis de las opciones. Quiero probar de forma unitaria la funcionalidad de la línea de comandos contra el código con test-unit y/o minitest.unidad probando un código de la aplicación de la línea de comando de ruby - cómo simular/pasar el
Parece que no puedo encontrar la manera de asegurarme de que la matriz ARGV (que normalmente contendría las opciones desde la línea de comandos) contiene mis opciones de prueba para que puedan probarse contra el código.
El código de la aplicación específica:
# 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
El ejecutable
# bin/myapp
el archivo de prueba
# 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
he sido capaz de pasar una matriz en ARGV en la clase de prueba, pero una vez que llamo a Myapp/Commands/Build, el ARGV parece estar vacío. Necesito asegurarme de que la matriz ARGV tenga 'build' y 'html' para que el comando Build funcione y esto pase.
¡Gracias, Dave! Exactamente lo que estaba buscando. Mientras tanto, terminé leyendo su libro [Creación de aplicaciones de línea de comandos increíbles en Ruby] (http://pragprog.com/book/dccar/build-awesome-command-line-applications-in-ruby). ;-) Implementé aruba con pepino para al menos obtener la prueba de aceptación. –