2016-04-04 3 views
0

Я новичок в phpspec (от phpunit), и у меня возникают проблемы с настройкой поведения макета, возвращенного другим макетом.Использование макета, возвращенного другим макетом в phpspec

Я создаю класс оболочки вокруг клиента 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(); 
} 

утверждение не удается, и когда я проверить, что этот код состояния, я вижу, что вместо integer 200, это экземпляр PhpSpec\Wrapper\Subject. Что мне здесь не хватает?

Я искал и искал Google, но не могу найти ресурсы об использовании макета, возвращенного другим макетом в phpspec. Мне интересно, причина в том, что это запах кода? Если так, я был бы рад увидеть, как я мог бы сделать это по-другому (в настоящее время я не вижу, как я мог бы держать код простым и делать по-другому).

ответ

0

попробовать:

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

это:

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

возвращает '200' строки завернутой в Subject объекте, на котором вы можете сделать ложные вызовы/заглушек в случае необходимости. Для получения фактической стоимости предмета необходимо позвонить по телефону getWrappedObject