2016-04-04 10 views
0

Ich bin neu unter phpspec (aus phpunit) und ich habe Probleme, das Verhalten eines Mock von einem anderen Schein zurückgegeben.Verwenden des Mock von einem anderen Mock in phpspec zurückgegeben

Ich erstellen eine Wrapper-Klasse um den Guzzle Client und ich möchte die Ausgabe der Antwort überprüfen.

Hier ist die Spezifikation:

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! :(
} 

und die entsprechenden Funktionen in meiner Klasse:

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(); 
} 

Die Behauptung versagt und wenn ich überprüfen, was dieser Status-Code ist, sehe ich statt der, dass Ganzzahl 200, es ist eine Instanz von PhpSpec\Wrapper\Subject. Was fehlt mir hier?

Ich habe gesucht und gegoogelt, aber kann keine Ressourcen über die Verwendung der Mock von einem anderen Schein in phpspec zurückgegeben. Ich frage mich, ob der Grund dafür ist, dass es ein Code-Geruch ist? Wenn ja, wäre ich froh zu sehen, wie ich das anders machen könnte (derzeit kann ich nicht sehen, wie ich den Code einfach halten und anders machen könnte).

Antwort

0

Versuch:

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

dies:

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

kehrt a '200' Schnur umwickelt in einem Subject Objekt, auf dem Sie dann Mock/Stub-Anrufe tätigen können, wenn nötig. Um den tatsächlichen Wert des Objekts zu erhalten, müssen Sie getWrappedObject

aufrufen