2016-04-04 24 views
0

içinde başka bir mock tarafından döndürülen sahte kullanma Ben phpspec (phpunit gelen) yeniyim ve başka bir mock tarafından döndürülen bir alay davranışını ayarlama sorunları var.phpspec

Guzzle istemcisinin etrafında bir sarıcı sınıfı oluşturuyorum ve yanıtın çıktısını kontrol etmek istiyorum.

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

ve benim sınıfında karşılık gelen işlevler: Burada

Spec var

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

iddia başarısız ve bu durum kodu ne olduğunu kontrol zaman yerine o, görüyorum integer 200, bu bir PhpSpec\Wrapper\Subject örneğidir. Burada neyi özlüyorum?

Ben arama yaptım ve googled ama phpspec başka bir aldatmaca tarafından döndürülen sahte kullanma hakkında kaynakları bulamıyorum. Bunun sebebinin bir kod kokusu mu olduğunu merak ediyorum. Öyleyse, bunu nasıl farklı bir şekilde yapabileceğimi görmekten memnuniyet duyarım (şu anda kodu nasıl basit ve farklı bir şekilde tutabildiğimi göremiyorum).

cevap

0

deneyin:

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

bu:

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

döner gerekirse daha sonra sahte/saplama arama yapabilirsiniz hangi bir Subject nesneye sarılmış bir '200' dizesi. Konunun gerçek değerini elde etmek için getWrappedObject

'u aramanız gerekir.