【问题标题】:GuzzlePHP mock response contentGuzzlePHP 模拟响应内容
【发布时间】:2015-02-14 21:05:05
【问题描述】:

我想模拟对 Guzzle 请求的响应:

 $response = new Response(200, ['X-Foo' => 'Bar']);

 //how do I set content of $response to--> "some mocked content"

 $client = Mockery::mock('GuzzleHttp\Client');
 $client->shouldReceive('get')->once()->andReturn($response);

我注意到我需要添加接口作为第三个参数:

 GuzzleHttp\Stream\StreamInterface

但是它的实现太多了,我想返回一个简单的字符串。有什么想法吗?

编辑:现在我用这个:

 $response = new Response(200, [], GuzzleHttp\Stream\Stream::factory('bad xml here'));

但是当我检查这个时:

$response->getBody()->getContents()

我得到一个空字符串。为什么是这样?

编辑 2:这仅在我使用 xdebug 时发生,当它正常运行时效果很好!

【问题讨论】:

  • 为什么不直接模拟Response呢?!我想被测类的行为取决于响应。所以你也想模拟它,这样你就可以确保每次 CUT 的输入数据都是相同的。

标签: php guzzle


【解决方案1】:

我们将继续这样做。前面的答案是针对 Guzzle 5,这是针对 Guzzle 6:

use GuzzleHttp\Psr7;

$stream = Psr7\stream_for('{"data" : "test"}');
$response = new Response(200, ['Content-Type' => 'application/json'], $stream);

【讨论】:

  • 查看Guzzle source,响应会自动为您执行此操作。只需传递一个字符串。
【解决方案2】:

前面的答案是针对 Guzzle 3。Guzzle 5 使用以下内容:

<?php
$body = GuzzleHttp\Stream\Stream::factory('some mocked content');
$response = new Response(200, ['X-Foo' => 'Bar'], $body);

【讨论】:

  • 我在我的帖子中添加了一些代码,你能看一下吗?
  • \GuzzleHttp\Stream\Stream::factory(反斜杠或使用 use 语句)
【解决方案3】:

使用@tomvo 回答和来自@Tim 的评论——这就是我在我的 Laravel 应用程序中测试 Guzzle 6 所做的:

use GuzzleHttp\Psr7\Response;

$string = json_encode(['data' => 'test']);
$response = new Response(200, ['Content-Type' => 'application/json'], $string);

$guzzle = Mockery::mock(GuzzleHttp\Client::class);
$guzzle->shouldReceive('get')->once()->andReturn($response);

【讨论】:

    【解决方案4】:

    Guzzle\Http\Message\Response 允许您将第三个参数指定为字符串。

    $body = '<html><body>Hello world!</body></html>';
    $response = new Response(200, ['X-Foo' => 'Bar'], $body);
    

    如果您更喜欢实现Guzzle\Stream\StreamInterface 的解决方案,那么我建议您使用Guzzle\Http\EntityBody 进行最直接的实现:

    $body = Guzzle\Http\EntityBody::fromString('<html><body>Hello world!</body></html>');
    $response = new Response(200, ['X-Foo' => 'Bar'], $body);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      相关资源
      最近更新 更多