Обнаружил интересную вещь при тестирование контроллера отвечающего за прием картинок с формы. Не уверен, что есть разница, но уточню, что я работаю с Laravel 4.
Так вот. Для тестирования я использую следующую конструкцию.
$file = new UploadedFile(codecept_data_dir(‘avatar.gif’), ‘avatar.gif’);
$I->sendPOST(‘http://project.dev/admin/logoUpload’, array(), array(‘file’ => $file));
Если проходить тест через Acceptance suite, то эта конструкция сформирует полноценны http запрос и отправит на сервер. Т.е. файл поместиться в tmp и от туда приложением будет перемещен в необходимую директорию.
Но в случае использования Functional suite http запроса не будет и в контроллер будет передан объет UploadedFile, который помнит, где храниться оригинал файла. И знаете, что он сделает, когда приложение, думая, что файл лежит в tmp, попытается перенести его в регулярную директорию? Правильно - он перенесет оригинал файла, тем самым сделав его недоступным для повторного тестирования.
У меня есть несколько идей о том, как можно обойти эту проблему костылями (которые скорей всего потом мне встанут боком), но уверен, что я не первый с этим сталкиваюсь и есть безопасные и элегантные решения этой проблемы.