2010-11-22 4 views
4

大規模なXMLリクエストテストを維持するのは楽しいことではありませんが、私は自分のWebサービスのコンシューマーに親切で、素晴らしいサンプルを提供する必要があります。良いWSプロバイダになるためのより良い方法はありますか?実際のXMLとJSONのリクエスト/レスポンスを使用して、APIドキュメントの役割を果たすための、レールアプリケーションの自動テストですか?

私はhtmlがありません。アプリケーションはXMLとJSONの両方を受け入れますので、APIの例(xmlとjsonの両方)の有効性を保証するために、統合スイートでOKを証明したいと思います。

あなたの答えでは、 "cucumber/webrat/capybaraを試してみる"ではなく、いくつかの例を見たいと思います。 htmlなしでhowtoを見つけるのは難しいです。助けてくれてありがとう!

答えて

1

私はXML要求を送信するために私にできるように、このスタンドアロンスクリプトを持っていましたが、サーバーを必要とする:

require 'rubygems' 
require 'net/http' 
require 'json' 
url = URI.parse('http://localhost:3030/myresource.xml') 
request = Net::HTTP::Post.new(url.path) 
request.content_type="text/xml" 
request.basic_auth('user', 'secret') 
request.body = "<?xml version='1.0' encoding='UTF-8'?><somedata><name>Test Name 1</name><description>Some data for testing</description></somedata>" 
response = Net::HTTP.start(url.host, url.port) {|http| http.request(request)} 
puts response 

は最終的に私はでこれを置く2. RSpecのを使用して、サーバーを起動せずにこれを行うことができましたスペックファイルspec/requestsの下で私は私のアプリでそれをwebratやcapybaraなしで行うことができます。今、私は私が私のドキュメントのXMLやJSONファイル(いくつかのhttp://リソース)などのリモートリソースからsome_xml_stringを構築することができますねXML

post("/myresource.xml", 
    some_xml_string, 
    {"CONTENT_TYPE" => "text/xml", 
     "HTTP_AUTHORIZATION" => ActionController::HttpAuthentication::Basic.encode_credentials("user", "secret")}) 

とJSON

post("/myresource.json", 
     some_json_string, 
     {"CONTENT_TYPE" => "application/json", 
     "HTTP_AUTHORIZATION" => ActionController::HttpAuthentication::Basic.encode_credentials("user", "secret")}) 

ため

例えば、。はい、それはもっと維持して、テストは壊れやすいでしょう。私はこれについてもっと考えなければならないでしょう...外部の人々によって使用されるAPIを変更することは、軽く取られるべきものではなく、常に多くのトレードオフです。より良い示唆は歓迎です!

2

JavaScriptを実行したり任意のhtmlを処理するためにwebrat/capybaraのファンシーな機能は必要ないので、basic integration test support from railsを使用するだけです。

APIサンプルをXMLまたはJSONのいずれかに簡単に変換できる形式で保存し、統合テストでこのファイルを使用して、両方のフォーマットタイプをテストし、テストリクエストの1つの表現。また、ドキュメントのAPI例を生成するタスクを記述することもできます。

あなたのテストでのAPIコールの完全な応答ボディは@ response.bodyに格納され、あなたはそれを解析して検証できます。

+0

「このドキュメントのAPI例を生成するにはどうすればよいですか」 – oma

+0

私は 'some_hash.to_xml'と' some_hash.to_json'を使うべきだと思います。私はすでにコントローラーにハッシュを送るテストをたくさんしていますので、私はそれに行くことができると思います..どのようにあなたのAPIを他人に文書化していますか? – oma

関連する問題