2012-10-13 35 views
14

geçerli bir geri arama olmasını bekler Bu hata nedeniylealay call_user_func_array() parametresi 1 ben alay gereken bir sınıf var

call_user_func_array() parametresi 1 geçerli geri olmasını bekler, sınıfının alay \ expec tation hattında /vendor/mockery/mockery/library/Mockery/CompositeExpectation.php yılında 'yayınla' bir yöntemi yok' 54

Ben testler bu kodu

başarısız bulundu ayıklama çalıştık
public function __call($method, array $args) 
{ 
    foreach ($this->_expectations as $expectation) { 
     call_user_func_array(array($expectation, $method), $args); 
    } 
    return $this; 
} 

burada
$ yöntemi = = dizi()
$ beklentisi

alay \ beklenti nesnesinin() örneği olan
$ bağımsız değişken 'yayınla'

php 5.3.10 kullanıyorum - herhangi bir fikir yanlış mı?

cevap

37

Bu gerçekleşiyor çünkü alayın kendisinden ziyade $mediaPublisherMock için apaçık bir beklenti ataıyorsunuz. gibi bu aramayı sona getMock yöntemi eklemeyi deneyin:

$mediaPublisherMock = \Mockery::mock('MessagePublisher') 
    ->shouldReceive('publish') 
    ->withAnyArgs() 
    ->times(3) 
    ->andReturn(null) 
    ->getMock(); 
+2

"yayımlamak" veya bölünmüş iki satırlık kod: $ mediaPublisherMock = \ Mockery :: mock ('MessagePublisher'); $ mediaPublisherMock> shouldReceive ('yayınla') -> withAnyArgs() -> kez (3) -> andReturn (null); Bu benim çözümümdü. –

+0

Adam .... sen bir hayat kurtarıcısın. -> getMock() 2 gün boyunca eksik olduğum şey –

0

Ben $ beklenti sınıf olmalıdır MessagePublisher inanıyoruz

Bu işleri standart PHPUnit Mock kütüphane

kullanılarak çözülmüştür

+0

iki kez kontrol - bu alay \ Beklenti, bu özellik _mock (alay \ Mock) ve _name = dizesini içeren – mrok

2

Tamam sorun: Ben bundan başlamadı neden

$mediaPublisherMock = $this->getMock('Mrok\Model\MessagePublisher', array('publish'), array(), '', false); 
$mediaPublisherMock->expects($this->once()) 
    ->method('publish'); 

;)