php - 测试文件下载,但禁止在命令行上输出文件内容
问题描述
我正在测试在我的 Symfony 应用程序中下载文件的路线,一切都很好,除了命令行上 PDF 内容的丑陋输出。
例如,我想检查某个用户角色是否具有下载 PDF 文件的访问权限:
$this->client->request('GET', '/media/download/1');
$this->assertTrue($this->client->getResponse()->isSuccessful());
当这部分测试被命中时,PDF 的内容会在命令行上打印出来,如下所示:
31 / 31 (100%)%PDF-1.4 %äüöß 2 0 obj <> 流 x��TKk�@����s��<�%0�8���1�PzR����K� ~��"j 9��������of��4 _����c(��C����������@|�c�T�3%��������p …………
这只是为了说明,实际输出要长得多。
这是一个普遍问题,其他 MIME 类型也会发生。
有没有可能抑制输出?
解决方案
在其他情况下,当您现在不需要输出时,您可以使用ob_
函数对其进行缓冲,例如:
// start buffering
ob_start();
$this->client->request('GET', '/media/download/1');
// and as you really don't care about output - just clean it
ob_clean();
// use
// $contents = ob_get_clean();
// if you still need output
$this->assertTrue($this->client->getResponse()->isSuccessful());
更新:为了避免错误信息
测试代码或测试代码没有(仅)关闭自己的输出缓冲区
使用ob_end_clean()
而不是ob_clean()
.
推荐阅读
- node.js - 使用自定义 webpack 加载器时抛出“错误:EISDIR:对目录的非法操作,读取”
- kubernetes - 来自本地注册表的 Kubernetes 映像
- algorithm - 为什么我们需要这么多分类技术?
- signalr - 使用 Blazor 向其他浏览器发送通知
- python - 是否可以只向 .gitignore 添加几行 python 脚本?
- javascript - Javascript 在重定向到正确的部分#id 之前关闭菜单
- django - 随机播放 HTML 列表元素顺序 - django
- asp.net - 如何在 Azure Functions 中使用 HttpTrigger 进行自定义模型绑定?
- bash - 在 googlecloud 启动脚本中启动 tmux 会话
- javascript - 如何克服 script.js:13 Uncaught TypeError: Cannot read property 'classList' of null at HTMLDivElement。