带有vfsStream的FilesystemIterator

时间:2017-07-28 14:38:05

标签: php phpunit vfs-stream

我正在使用(学习)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()似乎工作正常。没有错误。

如何使用FilesystemIterator迭代vfsSystem?我觉得要么1)$ root应该从vfs中返回一个FilesystemIterator可以使用的目录,或者b)我应该传递“vfs :: /”作为参数,但FilesystemIterator不知道什么是“vfs ::”事情是。

我确信我正在努力实现这一目标。提前谢谢。

1 个答案:

答案 0 :(得分:2)

我明白了。你必须使用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";
}

}