我正在尝试用PHPUnit构建一个测试来测试我的Braintree钩子。我有这个测试用例,它使用下面的dataProvider:
/**
* @covers SubscriptionExpiredHook::processHook()
* @dataProvider dataProvider
*/
public function testProcessHook($subscriptionId)
{
$subscriptionExpiredHook = new SubscriptionExpiredHook($this->siteManager);
$notification = $this->getMockBuilder('Braintree\WebhookNotification')
->disableOriginalConstructor()
->getMock();
$notification->subscription->id = $subscriptionId;
$router = $this->getRouterMock();
$subscriptionExpiredHook->setSubscription(new Subscription($router));
$response = $subscriptionExpiredHook->processHook($notification);
$this->assertEquals(200, $response->getStatusCode());
}
public function dataProvider()
{
return [
[
'subscription_id' => 'CRM1872',
]
];
}
造成问题的一行是:
$subscriptionId = $hook->subscription->id;
...这是我运行测试时得到的错误:
1) CRMPiccoBundle \测试\布伦特里\钩\ SubscriptionExpiredHookTest :: testProcessHook 数据集#0('CRM1872')间接修改过载 属性Mock_WebhookNotification_e65192ec :: $ subscription没有 效果
有没有办法可以设置订阅ID以允许此测试继续进行,或者我是否以错误的方式查看它?
答案 0 :(得分:1)
完全披露:我在Braintree工作。如果您有任何其他问题,请随时联系support。
WebhookNotifications目前不具备可模仿性,但我们的路线图中提供了更强大的webhook测试功能。目前,使用WebhookTesting::sampleNotification
打包sampleNotification
的{{1}}类型以及WebhookNotification
。您可以查看示例用法here。
请注意,subscription_id
不会为您提供整个对象,您必须对沙箱运行find才能检索整个订阅。