我经常想模拟控制器中的组件或对象。我使用controllerSpy方法来实现这一点,如下所示:
public function controllerSpy($event, $controller = null)
{
parent::controllerSpy($event, $controller);
$OrderConfirmation = $this->getMockBuilder('OrderConfirmation')
->setMethods(['send'])
->getMock();
$OrderConfirmation->expects($this->once())->method('send');
$this->_controller->OrderConfirmation = $OrderConfirmation;
}
问题是在每个测试中都设置了调用send-Method的期望值。但这取决于场景,有些场景不应该发送确认。我想在测试本身中配置期望值,而不是在controllerSpy
方法中全局配置。类似于以下内容:
public function testAddOrder()
{
$this->_controller->OrderConfirmation->expects($this->once())->method('send');
$this->post('/add_order');
}
但问题是预期会丢失,因为整个OrderConfirmation对象稍后会被覆盖。以前有人解决过这个问题吗?
1条答案
按热度按时间gfttwv5a1#
您可以只监听
Controller.initialize
事件,这也是测试调度程序所做的:或者实现
controllerSpy()
方法的回调,如下所示: