http://www.perlmonks.org?node_id=11117535

nysus has asked for the wisdom of the Perl Monks concerning the following question:

Given this test in test.t:

#/usr/bin/env perl use Test::More; use strict; use warnings; use Proc::InvokeEditor; my $edited_text = Proc::InvokeEditor->edit('edit me'); is $edited_text, "edit you\n", 'can edit text'; done_testing();

The Proc::InvokeEditor spawns a new editor instance. When this test is run with prove test.t, you get:

test.t .. Vim: Warning: Output is not to a terminal

The test runs fine with perl test.t. What's the best fix for this?

$PM = "Perl Monk's";
$MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate Priest Vicar";
$nysus = $PM . ' ' . $MCF;
Click here if you love Perl Monks

Replies are listed 'Best First'.
Re: Running an editor in a test with "prove" command
by haukex (Bishop) on May 31, 2020 at 16:12 UTC

    Tests that require an interactive TTY don't mix well with non-interactive test environments; consider for example what would happen if this test were to be run on CPAN Testers. An alternative to the below is to use something like prompt from ExtUtils::MakeMaker, which can be forced to use defaults if run non-interactively.

    use warnings; use strict; use Test::More; use Proc::InvokeEditor; use IO::Interactive qw/is_interactive/; SKIP: { skip "running non-interactively", 1 unless is_interactive; my $edited_text = Proc::InvokeEditor->edit('edit me'); is $edited_text, "edit you\n", 'can edit text'; } done_testing;

      Nice. I was scratching my head wondering if there was a way I could determine if I was running the script as a test or not. IO::Interactive is exactly what I needed. Thanks!

      $PM = "Perl Monk's";
      $MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate Priest Vicar";
      $nysus = $PM . ' ' . $MCF;
      Click here if you love Perl Monks

        I think -t STDOUT would also do it.

Re: Running an editor in a test with "prove" command
by Anonymous Monk on Jun 01, 2020 at 01:03 UTC