【问题标题】:Testing Guzzle 6 Download Progress测试 Guzzle 6 下载进度
【发布时间】:2016-06-22 14:47:54
【问题描述】:

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

这里是要测试的代码:

    $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 方法。

【问题讨论】:

    标签: php unit-testing testing guzzle guzzle6


    【解决方案1】:

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

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

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

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

    如果您的目标是测试处理程序的能力,我建议您参考 Guzzle 测试套件。

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

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

    【讨论】:

    • 最终我决定单独测试downloadProgress 方法。我只是希望在它们一起触发时一起测试它们,但是当我测试下载进度时,我需要测试几个条件,因此实际上单独测试它更有意义。
    猜你喜欢
    • 2016-04-27
    • 2019-12-25
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2017-01-21
    相关资源
    最近更新 更多