Ich versuche, die Ausgabe meines Edelsteins zu testen, der GLI verwendet, aber ich stehe in Probleme. In meinem Test-Setup bin ich Umleitung $stdout
und $stderr
zu StringIO
Instanzen, aber wenn ich meinen Code ausführen, bekomme ich immer noch eine Nachricht auf meinem Bildschirm gedruckt, anstatt auf meine benutzerdefinierten Objekte umgeleitet werden.
begin
old_stdout, old_stderr, $stdout, $stderr = $stdout, $stderr, StringIO.new, StringIO.new
@exit_code = described_class.run([command] + command_args)
@stdout = $stdout.string
@stderr = $stderr.string
ensure
$stdout = old_stdout
$stderror = old_stderr
end
Ich würde erwarten, dass described_class.run([command] + command_args)
der Aufruf endet exit_now!
Methode des GLI würde jedoch zu $stderr
weitergeleitet dies nicht der Fall zu sein scheint.
Gibt es eine Möglichkeit, wo/wie eine Zeichenfolge auf dem Bildschirm gedruckt wurde?
Können Sie bitte ein [mcve] des von Ihnen beschriebenen Problems angeben? Welche Werte für 'concribed_class',' command' und 'command_args' können verwendet werden, um das Problem zu replizieren, während Sie es beschreiben? Ich warf einen kurzen Blick auf [den 'GLI' Quellcode] (https://github.com/davetron5000/gli/blob/84c21131320168178077e9bfe03f51f0e28d361e/lib/gli/app_support.rb#L242), und ich kann nicht sehen warum Ansatz würde unter normalen Umständen scheitern. –
Allerdings habe ich auch festgestellt, dass die Bibliothek bietet eine ['error_device ='] (https://github.com/davetron5000/gli/blob/84c21131320168178077e9bfe03f51f0e28d361e/lib/gli/app_support.rb#L5-L7) -Methode, die ist intern für eigene Tests wie [hier] verwendet (https://github.com/davetron5000/gli/blob/84c21131320168178077e9bfe03f51f0e28d361e/test/tc_subcommand_parsing.rb#L8-L23). Kann dieser Ansatz nützlich sein? –
Sie können weiterhin mit den Konstanten 'STDOUT/STDERR' auf die ursprünglichen Streams zugreifen – Max