You can tellstarman to not fork any children via max_servers=1 IIRC. (Might be 0, unsure. On mobile now...
The way forward always starts with a minimal test.
| [reply] [d/l] [select] |
I'm still uncertain as to how I would do this. I tried this:
my $test = Plack::Test->create($app, server => 'Twiggy', port => 5000);
But I'm not sure how get WWW::Mechanize::Chome to make requests on the $test object. Can you give me a couple of hints?
| [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] |
Thanks, Corion. I'll take a close look at this.
I have one more very basic, big picture question. Why not just just fire up a server with a plackup command directly before running tests and just use that?
| [reply] |