问题标签 [vfs-stream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3137 浏览

php - Trying to test filesystem operations with VFSStream

I'm trying to mock a filesystem operation (well actually a read from php://input) with vfsStream but the lack of decent documentation and examples is really hampering me.

The relevant code from the class I'm testing is as follows:

The setup I'm using in my PHPUnit test is as follows:

In an actual test (which calls a method which indirectly triggers getHandle()) I try to set up the VFS and run an assertion as follows:

This just causes the test to hang.

Obviously I'm doing something very wrong here, but given the state of the documentation I'm unable to work out what it is I'm meant to be doing. Is this something caused by vfsstream, or is phpunit mocking the thing I need to be looking at here?

0 投票
3 回答
12397 浏览

php - PHPUnit:我如何模拟这个文件系统?

考虑以下场景(这不是生产代码):

对,那有什么问题?代码覆盖率报告此行未涵盖:

这是正确的,但是由于我在逻辑上创建了上面的文件夹,因此似乎不可能fopen()失败(可能在极端情况下除外,例如 100% 的磁盘)。

我可以忽略代码覆盖率中的代码,但那是一种作弊。有什么方法可以模拟文件系统,以便它可以识别myFile.txt和模拟无法创建文件的文件系统?

0 投票
2 回答
198 浏览

php - 仅当只有一种测试方法时才能通过测试

如果我注释掉下面的测试之一,则测试通过。但是,同时运行两者,最后一个将失败(即使我更改测试顺序):

生产代码:

测试类:

测试输出:

这对我来说没有任何意义。我错过了什么?

0 投票
1 回答
296 浏览

php - 使用 vsfStream 和 PHP 单元进行测试

所以我目前正在进行单元测试,在旅行中我发现我可能还需要模拟文件系统以及数据库查询等。

我从 PHPUnit 文档中阅读了一个建议,即 vfsStream 是一个很好的模拟文件系统的库。

不过,我在使用它时遇到了问题。

尽管在 GitHub 上托管的 wiki 中提供了以下文档,但我并不真正了解如何设置它。

我已经使用一些恰当命名的方法将文件系统交互抽象到它自己的类中。这似乎不是手头的问题,因为当我没有模拟文件系统时,它按预期工作。

这是我设置测试的方式:

这是我为测试目录创建而编写的示例测试:

这似乎有效,到目前为止一切都很好。但是,下一个测试失败了:

据我从文档中可以看出,这应该可以工作,但显然我对它的阅读是不正确的,而且我在某些地方出了差错。

关于如何解决此问题的任何提示,因为我一直在一遍又一遍地改变线路,并且无法为我的生活弄清楚。

先感谢您!

0 投票
1 回答
177 浏览

php - php vfsStream 不解析换行符

我正在尝试使用此处的 vsf-stream 对适用于 csv 文件的隔离方法进行单元测试:https ://github.com/mikey179/vfsStream

我创建了一个二维数据数组进行测试,但是当我尝试将其添加到模拟文件时,它似乎解析换行符,而不是添加新行。我都试过了fputcsvfputs但两者都有相同的结果。使用相同的数据和 php 函数,我可以成功写入普通文件,问题似乎出在 vfs-stream 上。网上没有太多文档并且完全丢失了:

上面的代码将生成模拟文件,但没有任何换行符,因此稍后在测试中解析模拟的 csv 文件将不起作用,因为它似乎都写在一个长行中:

将产生:

我希望我为此错过了一个标志,而不是一个错误。任何帮助表示赞赏,欢呼。

0 投票
2 回答
1599 浏览

php - vfsstream 路径和真实路径

我正在尝试使用 vfsStream 对文件系统交互进行单元测试,并且很快遇到了一个主要障碍。被测代码所做的验证检查之一是在提供的输入路径上执行 realpath() 以测试它是实际路径而不是废话。但是,realpath 在 vfsstream 路径上总是失败。

以下代码演示了任何特定类之外的问题。

输出如下:

显然 vfsStream 创建了文件并将给定的内容写入其中,但我无法使用 realpath 验证它的路径是否正确。由于在实际代码中使用了 realpath,我需要一种解决此问题的方法。

我真的不认为删除 realpath 是一种明智的方法,因为它在代码中执行了一个重要的功能,并且仅仅为了使代码可测试而消除一个重要的检查似乎是一个非常糟糕的解决方案。我还可以在测试周围放置一个 if 以便可以禁用它以进行测试,但我再次认为这也不是一个好主意。此外,我不想在代码中可能调用 realpath() 的每个点都这样做。第三种选择是为文件系统单元测试设置一个 RAM 磁盘,但这也不理想。您必须自己清理(这是 vfsstream 应该帮助您避免需要的),并且实际执行方式因操作系统而异,因此单元测试将不再与操作系统无关。

那么有没有办法以实际适用于 realpath 的格式获取 vfsstream 路径?

为了完整起见,以下是我正在尝试实际测试的类的代码片段。

对以下内容的重构(根据潜在的解决方案 2)允许我使用 vfsStream 进行测试,但我认为这在生产中可能会出现问题:

0 投票
1 回答
999 浏览

unit-testing - PHP 单元测试和模拟文件系统 scandir()

我在一个类中有一个方法可以扫描一个目录并创建一个包含所有子目录的数组。这很简单,而且效果很好。但是,我想为此方法添加一个单元测试,但我很难弄清楚如何做。

这是我的问题:我可以使用 vfsstream 创建一个虚拟文件系统,它工作正常。但是,我不能将它传递给我的班级来创建一个数组。它需要一个真实的目录来扫描。我想针对受控目录进行测试(显然,我确切地知道每次扫描的结果是什么,以便我可以测试它)。生产中的扫描目录可能会经常更改。

所以,我唯一的解决方案是在我的测试文件夹中创建一个特定于测试的假目录,将该路径传递给我的扫描仪,然后根据我知道的那个假目录中的内容检查它。这是最佳实践还是我错过了什么?

谢谢!

这是一些代码:测试

0 投票
1 回答
1507 浏览

php - phpspec 测试文件内容/文件操作

我很好奇指定处理文件操作的类的最佳方法。

假设我有一个虚构的类,duplicate其工作是复制文件的内容。

我知道我可以使用 vfsStream 之类的东西来断言更改而无需触及实际的文件系统(至少使用 PHPUnit 中的断言)。

我怎么能在规范中断言呢?还是会以不同的方式处理?

另外,我知道我可能想将该功能提取到另一个类中并使用 Spy 来断言 FileOperator 正确调用了它的依赖项,但是我仍然必须指定该适配器类,我的问题仍然存在。

谢谢。

0 投票
0 回答
55 浏览

php - 是否可以将 vfsStream 与 cakephp(2.4)一起使用?

我想使用 vfsStream 测试我的 cakephp-app 的文件系统操作,但不得不发现似乎不可能使用 cakephp 的 File 和 Folder 类将文件写入虚拟文件系统。其原因似乎是在 Folder-class 的构造函数中调用了 php 函数 realpath()。使用 realpath() 时,vfsStream 似乎会中断(请参阅http://stubbles.org/categories/5-vfsStream -“realpath() 仍然不起作用 - 无法通过 realpath() 的方式使其工作)目前在 PHP 本身中实现。")

似乎是我不走运,或者你们中的任何人都知道解决此问题的方法吗?

0 投票
1 回答
206 浏览

php - 使用 pear 安装 vfsstream

我需要在我的环境中设置vfsStream它与 PHPUnit 一起使用。不幸的是,这个项目很旧,我不能使用作曲家。相反,我尝试根据文档使用 pear 安装它。Bovigo通道被发现正确但是当我尝试安装时,vfs我得到以下堆栈跟踪: