2012-03-28 5 views
0

Ich habe die folgende Methode:Wie diese Methode zu testen, sollte verschiedene Arten von Ausnahmen auslösen?

def call_http_service(url, url_params) 
    begin 
     conn = create_connection(url) 
     resp = get_response(conn, url_params) 
     raise_if_http_status_error(resp) 
     xml_resp = parse_xml(resp) 
     raise_if_client_status_error(xml_resp) 

     return xml_resp 
    rescue ClientError => e 
     raise ClientError, "Error interacting with feed at #{url}: #{e.message}" 
    rescue Faraday::Error::ClientError => e 
     raise ClientError, "Error interacting with feed at #{url}: #{e.message}" 
    rescue Nokogiri::XML::SyntaxError => e 
     raise ClientParseError, "Error parsing response from #{url}: #{e.message}" 
    rescue => e 
     raise e 
    end 
    end 

Aufgrund meiner begrenzten Verständnis von RSpec, es sieht aus wie die Art und Weise zu testen, dass diese verschiedenen Arten von Ausnahmen angehoben werden, ist message expectations zu verwenden. Gehen Sie so vor?

Antwort

2

Es würde wie folgt aussehen:

it "raises ClientError when the HTTP request raises ClientError" 
    # stub the http request here to raise the error 
    expect do 
    subject.call_http_service 'http://example.com' 
    end.to raise_error(ClientError) 
end 

Hinweis: Rescuing und einen anderen Fehler reraising ist Codegeruch.

Verwandte Themen