2016-08-09 53 views
1

Ich versuche, Weiß-Test zu schreiben, um meine API mit Datei-Uploads zu testen.Unite Test: Serialisierung von 'Symfony Component HttpFoundation Datei UploadedFile' ist nicht erlaubt

Ich verfolge die docs about this mit grundlegenden Client-Anfrage, nicht Crawler.

Die Unit-Test ist:

class RecordsControllerTest extends WebTestCase { 

private $client; 

public function __construct() { 
    parent::__construct(); 
    $this->client = self::createClient(); 
    $this->client->insulate(); 
} 

public function testApiPostUpload($params){ 
    $fileToUpload = realpath(__DIR__.'/../../resources/mpthreetest.mp3'); 
    $file = new UploadedFile(
     $fileToUpload, 
     'mpthreetest.mp3', 
     MimeTypeGuesser::getInstance()->guess($fileToUpload), 
     filesize($fileToUpload) 
    ); 
    $this->client->request('POST', '/records/'.$params['createdRecordId'].'/upload', array(), array('file' => $file)); 

    $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); 
} 
} 

Wenn ich den Test ausführen erhalte ich einen Fehler:

Exception: Serialization of 'Symfony\Component\HttpFoundation\File\UploadedFile' is not allowed 

/path/to/project/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Client.php:165 
/path/to/project/vendor/symfony/symfony/src/Symfony/Component/BrowserKit/Client.php:348 
/path/to/project/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Client.php:143 
/path/to/project/vendor/symfony/symfony/src/Symfony/Component/BrowserKit/Client.php:313 
/path/to/project/src/Bundle/Tests/Functional/Controller/RecordsControllerTest.php:182 

I this question für etwa den gleichen Fehler gefunden haben, aber in diesem Fall die Anforderung nicht an den Controller gesendet und das Problem ist nicht die Entität und die Implementierung der Serialisierung.

Wer weiß, wie man das repariert?

Wer hat es geschafft, Einheitentest für das Hochladen von Datei in Symfony 2 zu machen?

Antwort

1

Sie die Anfragen falsch könnten versuchen, dies die insulate Methode als Argument nicht zu isolieren vorbei so versuchen:

$this->client->insulate(false); 

statt dem:

$this->client->insulate(); 

Hope this Hilfe

+0

Diese festen Das Thema. Vielen Dank ! –

+0

Ich habe das gleiche Problem, aber für mich, 'isolate (false)' behebt das Problem nicht. –