我不知道这种方法是如何工作的。以下是我尝试使用它的示例:
namespace spec;
use PhpSpec\ObjectBehavior;
class MyObjectSpec extends ObjectBehavior
{
/**
* @param SomeEvent $event
* @param SomeSubscriber $subscriber
*/
function it_formats_the_string_as_a_header_if_underline_with_single_dashes(
$event,
$subscriber
)
{
$subscriber->onChange($event)->shouldBeCalled(); //RIGHT HERE
// when
$this->addSubscriber($subscriber);
$this->doWhatever($event);
}
}
class SomeEvent {}
class SomeSubscriber
{
function onChange($event){}
function usesOnChange(){
$someEvent = new SomeEvent();
$this->onChange($someEvent);
}
}
命名空间是正确的,文件分别位于ObjectSpec.php,SomeEvent.php(在src文件夹中)和SomeSubscriber.php(在src文件夹中)。这给了我一个错误没有呼叫匹配,但至少有一个是预期的为什么这不起作用?谢谢。
答案 0 :(得分:2)
您能提供MyObject
的实施吗?如果你想得到正确答案,将会有所帮助。
当您尝试创建对象方法的模拟时->shouldBeCalled()
基本上意味着应该在对象onChange()
上调用带有参数$event
的方法$subscriber
。
您获得的消息基本上意味着该方法未被调用,现在是您应该实现它的步骤。
我已经提供了类的基本实现,可以在PHPSpec运行中获得成功的结果。
<?php
class MyObject
{
private $subscribers = array();
public function addSubscriber($subscriber)
{
$this->subscribers[] = $subscriber;
}
public function doWhatever($event)
{
foreach($this->subscribers as $subscriber) {
$subscriber->onChange($event);
}
}
}