2009-06-30 11 views
2

Zend_Test_PHPUnit_ControllerTestCaseを使用してファイルアップロードを受け取るコントローラアクションをテストするにはどうすればよいですか?Zend Frameworkを使用したファイルアップロードとユニットテスト

$this->getRequest()->setPost()は、データ配列内のファイル名を取ることが理想的ですが、これはサポートされていないようです。

この段階では、アプリケーションをコマンドラインでブートストラップ/実行し、フロント・コントローラーに渡すリクエスト・オブジェクトを作成します。これはZend_Test_PHPUnit_ControllerTestCaseをバイパスしますが、その後、ファイルがControllerTestCaseの次の$this->dispatch('/some/url')を介して正しくアップロードされたことを確認できます。しかし、このメソッドを使用してリクエストオブジェクトにファイルを取得する方法についても、私は困惑しています。

私が考えることができるのは、アプリケーション(APPLICATION_ENV='testing')を指すコマンドラインからHTTPサーバーを起動し、ZendのHttpクライアントまたはCURLなどを介してファイルをアップロードすることだけです。それは私を非常にエレガントなものにしません。

誰もがこの問題に対処しなければなりませんでしたか?

ありがとうございます!

答えて

6

Zend_File_Transferコンポーネントからunit testsをご覧になることをおすすめします。彼らはこれについていくつかの洞察を提供することができます。

基本的には、ユニットテストのsetUp()にある$_FILESスーパーグローバルを直接操作できます。次に、サービスの外部の並べ替えのためのモックオブジェクトを使用します。そうでなければ、本当に単体テストではなく、統合テストです。

ファイルをアップロードする実際のプロセスをテストすることについては心配しません。これがウェブサーバーと言語の領域です。重要なことは、受信したファイルで何をしているのかを適切にテストすることです。

しかし、これはすべて現在に依存していますか?あなたは現在ファイルのアップロードを処理しています。ファイルのアップロードの処理方法についてさらに詳しく説明した場合は、より多くの提案を提供することができます。

+0

ポインタありがとうございます! コントローラのアクションはフォームをインスタンス化し、リクエストがPOSTかどうかをチェックします。 通常、ControllerTestCaseはこの種のコントローラコードをテストするのに非常にうまく機能しますが、ファイルを処理するメカニズムはありません。この$ _FILESのアイデアを試してみます。 誰かが共有する例があれば、コントローラーコードのテスト状況の例を見てみたいです! – user131056

+0

@ jason:これは古い投稿だとわかっていますが、本当に助けが必要です。私は同様の問題を抱えています:ファイルのアップロードをテストしようとしていますが、ファイルが受信された後、かなり複雑なロジックが発生しています。私はあなたが示唆したようにユニットテストを見てみましたが、それは私の理解を少し超えています。基本的には、フォームが検証され、ファイルがアップロードされ、適切な場所にソートされていることを確認する必要があります。 – blainarmstrong