3

sfTestFunctional の post() メソッドを介してファイル アップロードの機能テストを実行できないようです。HTTP 投稿を処理するアクションは、ファイル アップロード フィールドを除くすべてのパラメーターを取得できます。

Symfony 1.4 のソース コードを見ると、sfBrowserBase は click() メソッド (具体的には doClickElement()) を介したファイルのアップロードのみを処理していると思います。それが機能テストを通じてファイルを「アップロード」する唯一の方法ですか?

ところで、REST API の一部である、送信するデータを表す HTML フォームがないため、これを求めています。機能テストで 'click()' が必要な場合は、必要な html フォーム要素を含むダミーの html ページを作成するだけです。

4

2 に答える 2

1

私はこれを見つけました: http://www.devcomments.com/Uploads-on-functional-test-for-REST-services-to189066.htm#filtered

しかし、Symfony 1.4 で動作させるために、少し変更する必要がありました。形式の問題として、'sfBrowser' を拡張する新しいクラス 'Browser' と 'sfTestFunctional' を拡張する 'TestFunctional' を導入しました。

ブラウザ::アップロードファイル():

content-type に $type パラメーターを追加しました。それ以外の場合、テストは失敗します (「無効な MIME タイプ」)


  public function uploadFile($fieldName, $filename, $type = '')
  {
    if (is_readable($filename))
    {
      $fileError = UPLOAD_ERR_OK;
      $fileSize = filesize($filename);
    }
    else
    {
      $fileError = UPLOAD_ERR_NO_FILE;
      $fileSize = 0;
    }

    $this->parseArgumentAsArray($fieldName, array('name' => basename($filename), 'type' => $type, 'tmp_name' => $filename, 'error' => $fileError, 'size' => $fileSize), $this->files);

    return $this;
  }

TestFunctional::uploadFile()


  public function uploadFile($fieldName, $filename, $type = '')
  {
    $this->browser->uploadFile($fieldName, $filename, $type);

    return $this;
  }

命名には注意する必要があります。


$browser = new TestFunctional(new Browser());
$browser->

  uploadFile('article_image[image]', '/path/to/your/image.gif', 'image/gif')->

  post('/articles/1/images.json', array('article_image' => array(
    'title' => 'foobar',
    'description' => 'lorum ipsum'
  )))

;
于 2011-02-15T15:57:50.350 に答える
0

問題は、機能テストがmime_typeが''(つまり空白)であると見なすことです。したがって、私にとってより簡単な方法は、app.ymlで有効なファイルタイプを定義することでした。

all:
  .validation:
    valid_file_types:
      - text/comma-separated-values
      - text/csv
...et cetera...

test:
  .validation:
    valid_slug_file_types:
      -

次に、フォームで、

$this->setValidator('file', new sfValidatorFile(array(
        'mime_types' => sfConfig::get('app_valid_file_types')
    )));

他の解決策(sfBrowserおよびsfTestFunctionalの追加のメソッド)は、ファイルフィールドが必要な場合は機能しません。

于 2011-04-05T23:49:18.433 に答える