我是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();
}
断言失败,当我检查这个状态代码是什么时,我看到的是PhpSpec\Wrapper\Subject
的实例,而不是整数200。我在这里缺少什么?
我搜索过并搜索过,但无法找到有关使用phpspec中另一个模拟返回的模拟的资源。我想知道它的原因是它是代码味道吗?如果是这样,我会很高兴看到我能以不同的方式做到这一点(目前我无法看到如何保持代码简单和不同的做法)。
答案 0 :(得分:0)
尝试:
assert($this->getResponseStatusCode()->getWrappedObject() === 200);
这样:
$response->getStatusCode()->willReturn(200)
返回一个包含在Subject
对象中的'200'字符串,然后您可以根据需要进行模拟/存根调用。要获得主题的真正价值,您需要致电getWrappedObject