2012-10-13 11 views
14

मैं मैं उपहास करने के लिए जरूरत है एक वर्ग है यह उम्मीद , इस त्रुटि के कारणमजाक call_user_func_array() पैरामीटर 1 एक वैध कॉलबैक

call_user_func_array() पैरामीटर 1 एक वैध कॉलबैक होने की उम्मीद है, वर्ग 'मजाक \ eXPEC tation में प्रकाशित '/vendor/mockery/mockery/library/Mockery/CompositeExpectation.php लाइन पर' एक विधि नहीं है '54

मैं मैंने पाया कि परीक्षण के लिए इस कोड

में विफल रहता है डिबग करने की कोशिश की
public function __call($method, array $args) 
{ 
    foreach ($this->_expectations as $expectation) { 
     call_user_func_array(array($expectation, $method), $args); 
    } 
    return $this; 
} 

जहां
$ विधि = 'प्रकाशित करें'
$ args = सरणी()
$ उम्मीद मजाक \ उम्मीद वस्तु()

का उदाहरण है

मैं php 5.3.10 का उपयोग कर रहा हूं - कोई विचार क्या गलत है?

उत्तर

37

ऐसा इसलिए हो रहा है क्योंकि आप नकली की बजाय $mediaPublisherMock पर नकली अपेक्षा नियुक्त कर रहे हैं। जैसे कि कॉल के अंत करने के लिए getMock विधि जोड़ कर देखें,:

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

"प्रकाशित" या विभाजित कोड दो पंक्तियों में: $ मीडियापुस्तक मॉक = \ मॉकरी :: मॉक ('संदेशपुस्तक'); $ mediaPublisherMock> shouldReceive ('publ') -> एनीअर्स() -> समय (3) -> और वापसी (शून्य); यह मेरा समाधान था। –

+0

मैन .... आप एक जीवन बचतकर्ता हैं। -> getMock() ठीक है जो मैं 2 दिनों के लिए याद कर रहा हूँ –

0

मैं, विश्वास है $ उम्मीद अपने वर्ग होना चाहिए MessagePublisher

+0

मैं दो बार जाँच की - यह मजाक \ उम्मीद है, यह संपत्ति _mock (मजाक \ मॉक) और नाम_ = स्ट्रिंग – mrok

2

ठीक समस्या मानक PHPUnit नकली पुस्तकालय

का उपयोग कर यह काम करता है द्वारा हल:

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

मैं इस से क्यों शुरू नहीं किया;)

संबंधित मुद्दे