2012-03-28 41 views
0

我有以下方法:如何测试该方法应该引发不同类型的异常?

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 

根据我有限的RSpec的理解,它看起来像的方式来测试,这些不同类型的异常升高的是使用message expectations。这是你如何接近它?

回答

2

这将是这个样子:

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 

注:救援和reraising不同的错误是代码味道。

相关问题