php - 测试 Guzzle 6 下载进度

标签 php unit-testing testing guzzle guzzle6

我在测试期间无法触发“进度”回调。

下面是要测试的代码:

    $this->guzzleClient->request(
        'GET',
        'http://example.com/somefile.csv',
        [
            'sink' => $this->directory . $this->filename . '.csv',
            'progress' => function ($download_size, $downloaded, $upload_size, $uploaded) {
                $this->downloadProgress($download_size, $downloaded, $upload_size, $uploaded);
            },
        ]);

我能够模拟响应并保存文件,但它永远不会触发“进度”。注意:我使用的响应选项与我从实时服务器获得的响应选项相同。

    $mock = new MockHandler([
        new Response(
            '206',
            [
                'content-type' => 'application/octet-stream',
                'Content-Range' => 'bytes 1113-1113/11591523',
            ],
            new Stream(fopen(__DIR__ . '/test_stream_file.txt', 'r'))
        )
    ]);

    $handler = HandlerStack::create($mock);
    $client = new Client(['handler' => $handler()]);

我正在考虑只测试模拟文件下载,然后单独测试 downloadProgress 方法(如果那是我唯一的选择)。

最佳答案

MockHandler未实现“进度”请求选项。

测试处理程序触发进度回调的能力将是 Guzzle 测试套件的重复。具体来说:

  1. > CurlFactoryTest::testEmitsProgress ;和
  2. > StreamHandlerTest::testEmitsProgressInformation

如果您的目标是通过测试确保回调执行预期的操作,请将其分离到不同的测试中。

如果您的目标是测试处理程序功能,我建议您使用 Guzzle 测试套件。

CurlFactory是非 Windows 系统的默认处理程序。

StreamHandler是 Windows 系统的默认处理程序。

关于php - 测试 Guzzle 6 下载进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37971490/

相关文章:

php - 如何获取主键字段的最后插入值?

php - OCR 图像的任何简单方法?

php - 通过 ffmpeg.exe 创建缩略图

android - 是否可以创建 android.os.Bundle 的 stub 以在 JVM 下进行测试?

testing - 如何进行基于操作系统配置文件的 Protractor 配置

php - 如何处理 BrainTree 中的 Webhooks

c++ - 使用 CppUnit 链接测试库

spring - 如何在 Mockito 中/使用 Mockito 模拟 BindingResult

testing - 我应该如何客观地测试我的程序结果?

android - 通过包名启动 Activity