13

W dokumentacji Symfony2 Daje to prosty przykład:przesłane Testowanie plików w Symfony2

$client->request('POST', '/submit', array('name' => 'Fabien'), array('photo' => '/path/to/photo')); 

symulować przesyłanie plików.

Jednak we wszystkich moich testach otrzymuję nic w obiekcie żądania $ w aplikacji i nic w tablicy $ _FILES.

Oto prosta WebTestCase, która się nie udała. Jest on samowystarczalny i testuje żądanie, że $ client konstruuje na podstawie parametrów, które przekazujesz. To nie jest testowanie aplikacji.

class UploadTest extends WebTestCase 
{ 

    public function testNewPhotos() 
    { 
     $client = $this->createClient(); 
     $client->request(
         'POST', 
         '/submit', 
         array('name' => 'Fabien'), 
         array('photo' => __FILE__) 
         ); 

     $this->assertEquals(1, count($client->getRequest()->files->all())); 
    } 
} 

Po to, aby być jasne. To nie jest pytanie o to, jak mogę przesłać pliki. Chodzi o to, jak je przetestować w Symfony2.

Edit

Jestem przekonany, że robię to dobrze. Stworzyłem test dla Framework i wysłałem żądanie ściągnięcia. https://github.com/symfony/symfony/pull/1891

Odpowiedz

2

Myślę, że to pytanie powinno zostać zamknięte lub oznaczyć jako odpowiedź, śledzę tę rozmowę: github.com/symfony/symfony/pull/1891 i wydaje się, że był to tylko problem z dokumentacją.

4

Oto kod, który współpracuje z Symfony 2.3 (nie próbowałem z innej wersji):

I stworzył zdjęcie. jpg plik obrazu i umieścić go w Acme \ Bundle \ Tests \ uploads.

Oto fragment z Acme \ Bundle \ Tests \ Controller \ AcmeTest.php:

function testUpload() 
{ 
    # Open the page 
    ... 

    # Select the file from the filesystem 
    $image = new UploadedFile(
     # Path to the file to send 
     dirname(__FILE__).'/../uploads/photo.jpg', 
     # Name of the sent file 
     'filename.jpg', 
     # MIME type 
     'image/jpeg', 
     # Size of the file 
     9988 
    ); 

    # Select the form (adapt it for your needs) 
    $form = $crawler->filter('input[type=submit]...')->form(); 

    # Put the file in the upload field 
    $form['... name of your field ....']->upload($image); 

    # Send it 
    $crawler = $this->client->submit($form); 

    # Check that the file has been successfully sent 
    # (in my case the filename is displayed in a <a> link so I check 
    # that it appears on the page) 
    $this->assertEquals(
     1, 
     $crawler->filter('a:contains("filename.jpg")')->count() 
    ); 
} 
+0

na utworzonym obiekcie UploadedFile $ file-> isValid() kończy się niepowodzeniem. Jakiś pomysł, dlaczego? – astroanu

+0

@astroanu dodaj nowe pytanie, aby wyjaśnić swój problem. –

Powiązane problemy