Файловая системаИтератор с 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";
}

}

Другие вопросы по тегам