I'm beginning the process of writing unit tests for Tesla::API, and want to test my timeout retry routine. By default, if calling Tesla's API time's out (ie. 500), it'll retry the call two more times.
This appears to work, but I want to test it. I can't mock code() or is_success() etc, because prior to running the code posted below, there are authentication routines that run that need to return proper codes and other pertinent information.
Essentially, how do I mock a mechanize timeout?
my $url = URI->new(URL_API . $uri); my $header = ['Content-Type' => 'application/json; charset=UTF-8'] +; if ($auth) { my $token_string = "Bearer " . $self->_access_token; push @$header, 'Authorization' => $token_string; } my $request = HTTP::Request->new( $type, $url, $header, JSON->new->allow_nonref->encode($api_params) ); my $response; for (1 .. API_TIMEOUT_RETRIES) { # If a timeout (ie. code 500) occurs, repeat the API call $response = $self->mech->request($request); if ($response->is_success) { my $response_data = _decode($response->decoded_content)->{ +response}; $self->_cache( endpoint => $endpoint_name, id => $id, data => $response_data ); return $response_data; } elsif ($response->code == 500) { next; } }
Thanks!
-stevieb
In reply to Forcing WWW::Mechanize to timeout by stevieb
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |