Файловая системаИтератор с vfsStream
Я использую (изучаю) vfsStream для тестирования операций файловой системы над деревом каталогов с 23 000 элементов в нем.
Вот что я пытаюсь сделать в тесте PHPUnit:
public function testMockFS() {
$buffer = (array) json_decode(file_get_contents(__DIR__ . '/resources/structure.json'));
$root = vfsStream::setup('/',null,$buffer);
$it = new FilesystemIterator($root);
foreach ($it as $fileInfo) {
echo $fileInfo->getFilename() . "\n";
}
}
Примечание: я знаю, что это ничего не проверяет. Прямо сейчас я просто пытаюсь заставить работать итерацию, и поэтому я хочу напечатать структуру каталогов на экране, прежде чем я начну писать тесты.
Structure.json - это дамп из производства, содержащий полное воспроизведение файловой системы (без содержания файла, что не имеет значения для того, над чем мы работаем).
vfsStream:: setup () работает нормально. Нет ошибок
Как перебрать vfsSystem с помощью FilesystemIterator? Я чувствую, что 1) $root должен возвращать каталог из vfs, с которым может работать FilesystemIterator, или b) я должен передавать "vfs::/" в качестве аргумента, но FilesystemIterator не знает, что такое "vfs::" вещи есть.
Я уверен, что я делаю это сложнее, чем должно быть. Заранее спасибо.
1 ответ
Я понял. Вы должны использовать vfsStream:: url ('/ path / to / directory / you / want');
public function testMockFS() {
$buffer = (array) json_decode(file_get_contents(__DIR__ . '/resources/structure.json'));
$root = vfsStream::setup('/',null,$buffer);
$it = new FilesystemIterator(vfsStream::url('/'));
foreach ($it as $fileInfo) {
echo $fileInfo->getFilename() . "\n";
}
}