I don't think my approach would work with Starman, since Starman uses fork, which means you will have more than one process running.
Having more than one process running means that your test code will run more than once, which is at least not what I want when writing tests.
| [reply] |
| [reply] [d/l] [select] |
| [reply] [d/l] [select] |
This is the very rough cut of combining plackup (in the form of Plack::Runner) and Twiggy with WWW::Mechanize::Chrome. I intend to flesh this out a bit and package it into its own module, but for the time being it works well enough for me.
Currently, this sets up / patches a Dancer application, but I imagine that converting this to use/support Dancer2 shouldn't be too hard, since all you need to get is $app somewhere, and most likely, Dancer2::Test has just enough code to give you the appropriate $app somewhere.
#!perl -w
use strict;
use Twiggy::Server;
use Dancer::Test;
use File::Temp 'tempdir';
use WWW::Mechanize::Chrome;
use Log::Log4perl qw(:easy);
use Data::Dumper;
use Test::More tests => 15;
Log::Log4perl->easy_init($ERROR); # Set priority of root logger to ER
+ROR
#Log::Log4perl->easy_init($TRACE); # Set priority of root logger to E
+RROR
my $port = 5099;
my $server = Twiggy::Server->new(
host => '127.0.0.1',
port => $port,
);
$ENV{DANCER_APPHANDLER} = 'Dancer::Handler::PSGI';
my $handler = Dancer::Handler->get_handler();
Dancer::_load_app('App::mykeep');
my $app = $handler->psgi_app();
$server->register_service($app);
# Fudge the config as appropriate for our test
Dancer::config()->{mykeep}->{notes_dir} = tempdir(
CLEANUP => 1,
);
my @cleanup_directories;
my $tempdir = tempdir( CLEANUP => 1 );
my $mech;
$mech = WWW::Mechanize::Chrome->new(
launch_exe => 'C:\\Users\\Corion\\Projekte\\WWW-Mechanize-Chrome\\
+chrome-versions\\chrome-65.0.3301.0\\chrome.exe',
data_directory => $tempdir,
#headless => 1,
);
$mech->clear_js_errors();
my $console = $mech->add_listener('Runtime.consoleAPICalled', sub {
diag join ", ",
map { $_->{value} // $_->{description} }
@{ $_[0]->{params}->{args} };
});
# run your tests here
# ...
| [reply] [d/l] [select] |