Доступ к файлу ресурса в тестовой директории в Symfony
В настоящее время у меня есть структура каталогов, как:
src
-App
--MyBundle
---Service
----DefaultService
tests
-AppMyBundle
--files
---data.csv
--Service
---DefaultServiceTest
Я пишу тест для чтения файлов, и я добавил data.csv
файл для демонстрационного файла для теста. В моем тесте мне нужно получить путь этого data.csv
файл. Но я не мог найти способ получить это. Я пытался получить доступ к нему через file_locator
сервис как:
$locator = $this->container->get('file_locator');
$path = $locator->locate('@AppMyBundle/Tests/files/data.csv');
а также
$locator = $this->container->get('file_locator');
$path = $locator->locate('@AppMyBundle/files/data.
Без удачи. пространства имен, если это необходимо моего DefaultService
является App\MyBundle\Service
а для DefaultServiceTest есть App\MyBundle\Tests\Service
2 ответа
Вы находитесь за пределами системы приложений / пакетов, поэтому попробуйте этот код:
$path = $this->get('kernel')->getRootDir() . '/../tests/AppMyBundle/files/data.csv';
В настоящее время я делаю это при написании модульных тестов (которые анализируют файл Excel) с использованием Symfony 5, PHPUnit 7.5. Мой подход намного проще. Мои тесты построены так:
tests
- Service
-- ManifestReaderTest.php
-- testdata
--- import_test_good.csv
Затем в моем классе ManifestReaderTest у меня есть следующее:
$this->assertFileExists(__DIR__ . "/testdata/import_test_good.csv" );
Таким образом, я не полагаюсь на внешние классы или службы.
Я использовал $client->getContainer()->getParameter('kernel.root_dir')
как это:
$client = static::createClient();
$schemaPath = sprintf(
'%s/../tests/MyBundle/Resources/rss2.xsd',
$this->_client->getContainer()->getParameter('kernel.root_dir')
);