【问题标题】:Using the mock returned by another mock in phpspec使用 phpspec 中另一个模拟返回的模拟
【发布时间】:2016-04-04 15:32:56
【问题描述】:

我是phpspec(来自phpunit)的新手,在设置另一个模拟返回的模拟的行为时遇到问题。

我正在围绕Guzzle 客户端创建一个包装类,并且我想检查响应的输出。

这是规格:

function it_gets_response_status_code(Client $client, Url $url, Response $response)
{
    $this->beConstructedWith($client);

    $url->__toString()->willReturn('http://example.com');
    $data = ['foo' => 'bar'];

    $response->getStatusCode()->willReturn(200);
    $client->request('POST', $url, ['form_params' => $data])->willReturn($response);

    $this->post($url, $data);
    assert($this->getResponseStatusCode() === 200); // Failing! :(
}

以及我班级中的相应函数:

public function post(Url $url, array $data)
{
    $this->response = $this->client->request('POST', (string) $url, ['form_params' => $data]);
}

public function getResponseStatusCode()
{
    return $this->response->getStatusCode();
}

断言失败,当我检查这个状态码是什么时,我看到它不是整数 200,而是PhpSpec\Wrapper\Subject 的一个实例。我在这里错过了什么?

我已经搜索和谷歌搜索,但找不到有关使用 phpspec 中另一个模拟返回的模拟的资源。我想知道这是不是因为它是代码味道?如果是这样,我很高兴看到我可以如何以不同的方式做到这一点(目前我无法看到如何让代码保持简单并以不同的方式进行)。

【问题讨论】:

    标签: post mocking httprequest phpspec


    【解决方案1】:

    尝试:

    assert($this->getResponseStatusCode()->getWrappedObject() === 200);
    

    这个:

    $response->getStatusCode()->willReturn(200)
    

    返回一个包裹在Subject 对象中的“200”字符串,如果需要,您可以在该对象上进行模拟/存根调用。要获得主题的真正价值,您需要致电getWrappedObject

    【讨论】:

      猜你喜欢
      • 2019-08-18
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2022-09-12
      • 1970-01-01
      • 2020-02-13
      • 1970-01-01
      相关资源
      最近更新 更多