2011-01-27 12 views
13

私はsinatraを使って基本的なREST APIを書いています。REST API用のRubyで単体テストを書く

誰でもテストのための最良の方法を知っていますか?私はRubyを使ってそうしたいと思います。

私はカールを使って私の初期テストを行った。しかし、もっと頑丈なことをしたいと思います。これは私の最初のAPIです - テストする必要のあるものは何ですか?

+0

カールには何が問題なのですか?あなたはカールを実行するユニットテストを書くことができ、あなたが期待しているもの、つまりヘッダとボディを返すことを確認できます。それ以外の場合は、http://watir.com/のようなものを検討するかもしれませんか? – iain

+2

@lain:Watirを使用するか、カールは単体テストではありません。一般的には、それは機能テストか統合テストです。 – Chamnap

+1

ユニットテストでは、外部からではなくコード内*の機能単位をテストしています。カールやそれ以外のものを使用してコードを調べています。単体テストで役立つWebサービスの詳細を知る必要があります。 –

答えて

4

多くはキュウリは本当に多くのアプリケーションや受け入れテストではなく、ユニットテストで使用し、それはHTTPヘッダを作成し、httpを形成するためのアプローチが含まれていないことを言うかもしれないが、あなたがこのアプローチhttp://anthonyeden.com/2013/07/10/testing-rest-apis-with-cucumber-and-rack.html

を見ているかもしれません私が推測している要求は、あなたが立ち往生している場所であろうか?

個人的に私が問題になることはありません。あなたが本当に単体テストをしようとしている場合は、APIが話している可能性のあるコード単位をモックする必要があります。データ)

デベロッパーではないQAの男として見て、私はキュウリを使用してそのレベルでテストすることに満足していますが、devs単体テスト時にも大いに感謝します。 rSpecではCukeの代わりに、 'rack test'のヒントが役に立つでしょう。

+0

そのリンクは現在死んでいる、それは404を返します –

+0

彼のワードプレスのサイトがハックされたようにええ、彼は新しい家http:// anthonyedenを設定しているようです。この時点であなたはおそらく彼に連絡してみるか、上記の回答を掲示した時点でそのサイトがどのように見えるかをインターネットタイムマシンの1つを使って試してみる必要があります。 –

+1

はリンクを修正しました。他のよく意味のある人が編集しようとしましたが、馬鹿の査読者は明らかにそれが変更の小さすぎると思っていました。個人的には、動作していないリンクを作業リンクに修正することは、私にとっては小さいようではありません。 –

0

私はfakeweb gemを使用して、Webサービスによるユニットテストを行います。

+0

これは単体テストではありません。上記のChamnapのように、統合テストです。 –

+1

いいえ、私はそれがすべてのhttp要求を傍受し、私たちが指定したモックデータを返送するので、単体テストだと思います。 – Chamnap

6

意見の問題です:)個人的には、私はシンプルで清潔です。 minitest、Watirrest-clientなどのツールを使用すると、RESTインターフェイスと、実際のブラウザ(すべての主要なブラウザがサポートされています)を通じてWebサービスをテストするという非常に簡単なテストを組み合わせることができます。

#!/usr/bin/ruby 
# 
# Requires that you have installed the following gem packages: 
# json, minitest, watir, watir-webdrive, rest-client 
# To use Chrome, you need to install chromedriver on your path 

require 'rubygems' 
require 'rest-client' 
require 'json' 
require 'pp' 
require 'minitest/autorun' 
require 'watir' 
require 'watir-webdriver' 

class TestReportSystem < MiniTest::Unit::TestCase 
    def setup 
     @browser = Watir::Browser.new :chrome # Defaults to firefox. Can do Safari and IE too. 
     # Log in here..... 
    end 

    def teardown 
     @browser.close 
    end 

    def test_report_lists # For minitest, the method names need to start with test 
     response = RestClient.get 'http://localhost:8080/reporter/reports/getReportList' 
     assert_equal response.code,200 
     parsed = JSON.parse response.to_str 
     assert_equal parsed.length, 3 # There are 3 reports available on the test server 
    end 

    def test_on_browser 
     @browser.goto 'http://localhost:8080/reporter/exampleReport/simple/genReport?month=Aug&year=2012' 
     assert(@browser.text.include?('Report for Aug 2012')) 
    end 
end 

スクリプトを実行するだけでテストケースを実行します。 Ruby用の他の多くのテストシステムとRESTクライアントがあり、同様の方法で動作させることができます。あなたが住んでいるAPI、またはシナトラ、ブドウ、Railsアプリケーションに対してどちらかに対してテストすることができます

https://github.com/brooklynDev/airborne

3

あなたは、この目的のために書かれたフレームワークがあるairborneを使用して試すことができます。

関連する問題