简体   繁体   中英

How can I run Perl test suite automatically when files change?

Is there a tool that would watch file changes in a directory tree of a Perl application and re-run the test suite every time I save changes to some module? Something akin to masak's tote .

如果您在Windows上, Win32::FileNotify可以帮助监视文件系统的更改。

The old school unix solution would be to write up a Makefile and trigger it regularly through a cron job (as frequently as once a minute), and have it mail you the results if something broke.

Alternatively if you use a revision control system such as svn, you could use a commit hook to kick off a build/test cycle when you commit a file.

One other thing you could do is write a wrapper script around your editor (such that when you close or save a file, the build/test cycle is triggered).

The basic way to do this is through source control and an continuous integration package, say, like Smolder . When you check in files, the CI server notices the changes and runs the test suite for you.

Many CI products collect cross-run information for you and can show you trends in your tests, test cover, and so on.

Ironically I just ported stakeout.rb to PHP this week. http://joshribakoff.com/?p=106

I don't know of any generic filesystem monitoring widget, but here's the Perl specific half.

sub run_tests {
    my $prove_out = `prove -lr`;
    my $tests_passed = $? == 0;

    return "" if $tests_passed;
    return $prove_out;
}

This uses the prove utility that comes with Test::Harness 3. It exits non-zero on test failure. Plug that into your filesystem monitoring thing and you're set.

I haven't managed to get Test::Continuous installed successfully on Windows, I use the following script, and it works pretty well for me:

use File::ChangeNotify;

$| = 1;

my $watcher = File::ChangeNotify->instantiate_watcher(
    directories => [ 't', 'lib' ],
    filter => qr/\.t|\.pl|\.pm/,
);

while (my @events = $watcher->wait_for_events) {
    print `prove -l -r -t --timer`;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM