2011-12-07 5 views
2

私はレストコントローラの単体テストをする方法がわかりません。私のコードは以下の通りです:Zendで残りのAPIをテストするには?

public function testpostAction(){ 
    $this->dispatch('/chain'); 

    $this->request->setHeader('Content-Type', 'text/json')   
        ->setMethod('POST') 
        ->setPost(array(
         'chain_name' => 'mychaintest' 
       )); 

    $this->assertAction('post'); ??? 

} 

私は投稿をしますか?これはあなたのRESTサービスをテストするためにPOSTコール(HTTP)を作りたい場合は、必要がありますが、何であれば

答えて

0

わからない、あなたはZend_Http_Client使用することができます。

http://framework.zend.com/manual/en/zend.http.client.html

とにかく、これがあれば単体テストの場合は、アプリケーションが必要です(現在のビルドがtestetである)ので、サーバーで稼働してアクセス可能である必要があります。これは、ビルド環境をどのように設定したかによって異なります。

テストが実行される前にビルドが(自動的に)展開されるステージング(仮想)マシンが必要です。そのマシンは、テストを実行しているマシンに表示される必要があります。

これが役に立った。乾杯!

+0

はい、それは、ユニットテストのためです。だから私はちょうどポストを作って、その結果をそのようなassertメソッドと比較した後にしたい:$ list = new Application_Model_DbTable_Chain(); \t \t $ entries = $ list-> fetchAll(); \t \t \t \t $ this-> assertSame(4、count($ entries)); – user1086617

+0

これは、サーバーにデプロイされていないRESTサービスを呼び出すことができないということです。ビルドでは、アプリケーションをテストサーバーにデプロイし、その後、そのライブサービスに対してテストスイートを実行する必要があります。 – nandinga

0

基本的にあなたの質問は、コントローラテストでPUTとDELETEを呼び出す方法をエミュレートする方法ですか?これ以来 は明らかに動作しません:

$this->request->setMethod('PUT'); 

あなたは_methodパラメータを提供することで、プレーンなHTTPのPOSTでこれらのアクションの両方にアクセスすることができます。

だから、PUTコールする:

$this->request->setMethod('POST'); 
$this->dispatch('articles/123?_method=put'); 

DELETE呼び出すには:ここにRESTfulなルーティングに対処する方法について

$this->request->setMethod('POST'); 
$this->dispatch('articles/123?_method=delete'); 

もっと読書 - http://framework.zend.com/manual/en/zend.controller.router.html#zend.controller.router.routes.rest

関連する問題