使用附加卡模拟 Stripe 客户服务
Mocking the Stripe Customer service with attached Cards
我正在为使用 Stripe 构建的支付平台编写单元和集成测试,需要使用 Mockery 模拟客户对象,不幸的是,我在尝试创建 Stripe 客户时遇到了一些困难带有附加的 Card 对象。
执行此操作的最佳方法是什么?
自从我发布这个问题后,我意识到我已经创建了一个抽象 Stripe 功能的服务,因此,我可以简单地扩展该功能以包含 createCard
updateCard
retrieveCard
和 deleteCard
方法:
class StripeService implements StripeServiceContract
{
public function createCard(Stripe\Customer $customer, $source, $default = true)
{
$source = $customer->sources->create(compact('source'));
if ($default) {
$customer->default_source = $source->id;
$customer->save();
}
return $source;
}
public function retrieveDefaultCard(Stripe\Customer $customer)
{
return $customer->sources->retrieve($customer->default_source);
}
}
然后我可以使用 mockery 来模拟这个:
Mockery::mock(StripeServiceContract::class, function (MockInterface $mock) {
$mock->shouldReceive('createCard')->andReturnUsing(function ($customer, $id, $default) {
return new Stripe\Card($id);
});
$mock->shouldReceive('retrieveCard')->andReturnUsing(function ($id) {
return new Stripe\Card($id);
});
});
我正在为使用 Stripe 构建的支付平台编写单元和集成测试,需要使用 Mockery 模拟客户对象,不幸的是,我在尝试创建 Stripe 客户时遇到了一些困难带有附加的 Card 对象。
执行此操作的最佳方法是什么?
自从我发布这个问题后,我意识到我已经创建了一个抽象 Stripe 功能的服务,因此,我可以简单地扩展该功能以包含 createCard
updateCard
retrieveCard
和 deleteCard
方法:
class StripeService implements StripeServiceContract
{
public function createCard(Stripe\Customer $customer, $source, $default = true)
{
$source = $customer->sources->create(compact('source'));
if ($default) {
$customer->default_source = $source->id;
$customer->save();
}
return $source;
}
public function retrieveDefaultCard(Stripe\Customer $customer)
{
return $customer->sources->retrieve($customer->default_source);
}
}
然后我可以使用 mockery 来模拟这个:
Mockery::mock(StripeServiceContract::class, function (MockInterface $mock) {
$mock->shouldReceive('createCard')->andReturnUsing(function ($customer, $id, $default) {
return new Stripe\Card($id);
});
$mock->shouldReceive('retrieveCard')->andReturnUsing(function ($id) {
return new Stripe\Card($id);
});
});