dosya yükleme fonksiyonel tıklayın çağırmadan symfony test ()

2 Cevap php

Ben sfTestFunctional adlı yazı () yöntemi üzerinden dosya yükleme fonksiyonel test yapmak için görünmüyor olabilir. HTTP post işleme benim eylem dosya yükleme alanı dışında tüm parametreleri almak mümkün değildir.

Symfony 1.4 'in kaynak kodları baktığımızda, ben sfBrowserBase tek tıklama ile dosya yükleme işlemek düşünüyorum () yöntemi (özellikle doClickElement ()). Olduğu fonksiyonel testi ile bir dosya 'yüklemek' için tek yol?

I bir REST API onun bir parçası, göndermek için verileri temsil eden herhangi bir HTML formu yok gibi MEZUNLARI, ben bu soruyorum. Fonksiyonel test 'click ()', sonra ben sadece gerekli html form elemanları ile kukla html sayfası oluşturmak zorunda gerekir.

2 Cevap

Buldum bu: http://www.devcomments.com/Uploads-on-functional-test-for-REST-services-to189066.htm#filtered

Ama Symfony 1.4 ile çalışmak için almak için onu biraz değiştirmek zorunda kaldı. Şeklinde bir mesele olarak ben 'sfTestFunctional' uzanır 'sfBrowser' ve 'TestFunctional' genişleten yeni bir sınıf 'Tarayıcı' tanıttı.

Tarayıcı) (yuklenecek_dosya :::

Ben aksi testi ('geçersiz mime-türü') başarısız, içerik-türü için $ tür parametresi eklendi


  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 :: yuklenecek_dosya ()


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

    return $this;
  }

Sen adlandırma hakkında dikkat çekmek için var:


$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'
  )))

;

Sorun fonksiyon testi mime_type'' (yani boş) olduğunu düşünüyor olmasıdır. Daha kolay bir yolu app.yml içinde geçerli dosya türlerini tanımlamak benim için bu yüzden:

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

test:
  .validation:
    valid_slug_file_types:
      -

Sonra Formu,

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

Dosyası alan gerekiyorsa başka çözüm (sfBrowser ve sfTestFunctional ekstra yöntemleri) benim için çalışmaz.