首页 > 解决方案 > 测试文件下载,但禁止在命令行上输出文件内容

问题描述

我正在测试在我的 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 类型也会发生。

有没有可能抑制输出?

标签: phpsymfonyphpunit

解决方案


在其他情况下,当您现在不需要输出时,您可以使用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().


推荐阅读