在为Braintree webhook构建PHPUnit测试时间接修改重载属性

时间:2016-08-25 06:22:46

标签: php symfony testing phpunit braintree

我正在尝试用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以允许此测试继续进行,或者我是否以错误的方式查看它?

1 个答案:

答案 0 :(得分:1)

完全披露:我在Braintree工作。如果您有任何其他问题,请随时联系support

WebhookNotifications目前不具备可模仿性,但我们的路线图中提供了更强大的webhook测试功能。目前,使用WebhookTesting::sampleNotification打包sampleNotification的{​​{1}}类型以及WebhookNotification。您可以查看示例用法here

请注意,subscription_id不会为您提供整个对象,您必须对沙箱运行find才能检索整个订阅。