use 5.014; use File::stat; use File::Temp; use Mojo::UserAgent::Mockable; use Mojo::UserAgent::Mockable::Serializer; use Test::Most; my $dir = File::Temp->newdir; my @transactions; push @transactions, Mojo::UserAgent->new->get(q{https://www.vam.ac.uk/api/json/museumobject/O1}), Mojo::UserAgent->new->get(q{https://www.vam.ac.uk/api/json/museumobject/O1}); my @results = map { $_->res->json } @transactions; plan skip_all => 'Museum API not responing properly' unless ref $results[0] eq 'ARRAY'; my $output_file = qq{$dir/victoria_and_albert.json}; my $mock = Mojo::UserAgent::Mockable->new( mode => 'record', file => $output_file ); for ( 0 .. $#transactions ) { my $result_from_mock; my $index = $_; diag qq{Check result $index}; lives_ok { $mock->get( $transactions[$_]->req->url->clone, sub { my ( $ua, $tx ) = @_; diag qq{Get URL $index}; is_deeply $tx->res->json, $results[$index], qq{result $index matches that of stock Mojo UA (nonblocking)}; } ); } 'get() did not die (nonblocking)'; } Mojo::IOLoop->start unless Mojo::IOLoop->is_running; $mock->save; ok -e $output_file, 'Output file exists'; isnt stat($output_file)->size, 0, 'Output file has nonzero size'; my @deserialized = Mojo::UserAgent::Mockable::Serializer->new->retrieve($output_file); is scalar @deserialized, scalar @transactions, 'Transaction count matches'; done_testing;