Now, How do I test that feature appears on the page? And by "on the page" I mean embedded attributes into a javascript call on the page.
I used Mojo::UserAgent and it's built in dom handling to make this easy-peasy! Load the page, look for script tags, find the one calling our Magic.Marker function and then use a regex to pull the args. Wrap it all up in Test::Most and throw some data into _DATA_!
ps. Writing his post took considerably longer than writing this test.
#!/usr/bin/perl
use v5.12;
use Mojo::UserAgent;
use List::Util qw(first);
use Test::Most;
my $ua = Mojo::UserAgent->new();
sub x_param_from_url
{
# load URL and find the first script block that
# contains Magic.Marker. Parse Magic.Marker args
# for items like "{ x: value }" and return all the
# values found.
my $url = shift;
my @scripts = $ua->get($url)->res->dom->find('script')->each();
my $script = first { $_->all_text =~ /Magic\.Marker/ } @scripts;
return unless $script;
my $text = $script->all_text;
my @matches = ( $text =~ m/\{ \s* x \s* : \s* (\S+) \s* \}/gimx );
return @matches;
}
foreach my $data (<DATA>)
{
chomp $data;
my ( $url, @expected ) = split( /\s/, $data );
# redirect to the internal-staging server
my $url =~ s/www.example.com/internal-staging.example.com/;
my @output = x_param_from_url($url);
eq_or_diff( \@output, \@expected, "$url")
}
done_testing
__DATA__
www.example.com/how-to_123 '2' '3'
www.example.com/why-not-1234 '1' '2'
www.example.com/why-not-777 '3'
This produces a lovely TAP output for the site:
% ./verify.pl not ok 1 - internal-staging.example.com/how-to_123 # Failed test 'internal-staging.example.com/how-to_123' # at ./verify.pl line 35. # +----+---------+----+----------+ # | Elt|Got | Elt|Expected | # +----+---------+----+----------+ # | 0|'\'2\'' | 0|'\'2\'' | # | | * 1|'\'3\'' * # +----+---------+----+----------+ ok 2 - internal-staging.example.com/how-to_123 ok 3 - internal-staging.example.com/why-not-777
No comments:
Post a Comment